JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [
"array-access",
"isomorphisms",
"lenses",
"optics",
"reflection",
"hacktoberfest"
],
"is_fork": false,
"size_kb": 368,
"has_wiki": false,
"homepage": null,
"languages": {
"PHP": 135081
},
"pushed_at": "2026-06-29T04:06:24Z",
"created_at": "2023-11-13T06:15:45Z",
"owner_type": "User",
"updated_at": "2026-05-29T09:47:25Z",
"description": "🪞 Reflecta 🪞 - Unleash the Power of Optics in your code!",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "PHP",
"significant_languages": [
"PHP"
]
},
"owner": {
"blog": "https://veewee.github.io/",
"name": "Toon Verwerft",
"type": "User",
"login": "veewee",
"company": "@phpro ",
"location": "Belgium",
"followers": 116,
"avatar_url": "https://avatars.githubusercontent.com/u/1618158?v=4",
"created_at": "2012-04-06T09:28:16Z",
"is_verified": null,
"public_repos": 113,
"account_age_days": 5226
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "1.0.1",
"kind": "patch",
"published_at": "2026-05-29T09:55:42Z"
},
{
"tag": "1.0.0",
"kind": "major",
"published_at": "2026-05-27T14:10:30Z"
},
{
"tag": "0.19.0",
"kind": "minor",
"published_at": "2026-05-26T08:10:16Z"
},
{
"tag": "0.18.0",
"kind": "minor",
"published_at": "2026-03-27T06:28:01Z"
},
{
"tag": "0.17.0",
"kind": "minor",
"published_at": "2026-03-26T17:31:43Z"
},
{
"tag": "0.16.0",
"kind": "minor",
"published_at": "2026-03-19T07:04:28Z"
},
{
"tag": "0.15.0",
"kind": "minor",
"published_at": "2026-03-11T14:58:14Z"
},
{
"tag": "0.14.0",
"kind": "minor",
"published_at": "2025-10-14T12:22:02Z"
},
{
"tag": "0.13.0",
"kind": "minor",
"published_at": "2025-02-06T06:21:58Z"
},
{
"tag": "0.12.0",
"kind": "minor",
"published_at": "2025-01-24T15:19:39Z"
},
{
"tag": "0.11.0",
"kind": "minor",
"published_at": "2024-12-19T12:01:55Z"
},
{
"tag": "0.10.0",
"kind": "minor",
"published_at": "2024-10-25T06:31:34Z"
},
{
"tag": "0.9.0",
"kind": "minor",
"published_at": "2024-09-06T10:11:18Z"
},
{
"tag": "0.8.1",
"kind": "patch",
"published_at": "2024-06-18T07:03:05Z"
},
{
"tag": "0.8.0",
"kind": "minor",
"published_at": "2024-06-14T05:32:56Z"
},
{
"tag": "0.7.0",
"kind": "minor",
"published_at": "2024-06-13T11:26:12Z"
},
{
"tag": "0.6.0",
"kind": "minor",
"published_at": "2024-06-12T07:51:44Z"
},
{
"tag": "0.5.0",
"kind": "minor",
"published_at": "2024-06-06T13:00:07Z"
},
{
"tag": "0.4.0",
"kind": "minor",
"published_at": "2024-05-03T13:46:34Z"
},
{
"tag": "0.3.0",
"kind": "minor",
"published_at": "2024-01-30T11:31:11Z"
},
{
"tag": "0.2.0",
"kind": "minor",
"published_at": "2023-12-03T14:30:21Z"
},
{
"tag": "0.1.0",
"kind": "minor",
"published_at": "2023-11-19T17:40:43Z"
}
],
"recent_commits": [
{
"oid": "5b8806dfb534bc69ba4b493a4858ad5c13b30272",
"body": "Keep unnecessary artefacts out of releases",
"is_bot": false,
"headline": "Merge pull request #33 from raphaelstolt/lean-releases",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-05-29T09:47:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f15b73e99d990db90dfca2d8896c62eb0ca0473",
"body": null,
"is_bot": false,
"headline": "Keep LICENSE, README and docs in releases",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-05-29T09:39:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8d19e1600f0ce325cb4b8d749aaa36a61dba49bb",
"body": null,
"is_bot": false,
"headline": "Keep unnecessary artefacts out of releases",
"author_name": "Raphael Stolt",
"author_login": "raphaelstolt",
"committed_at": "2026-05-29T09:12:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "876a9e9be4b0a688c1903e2d2821ae7d16305b6e",
"body": "Migrate Iso/Lens to STAB form (Iso<S,T,A,B>)",
"is_bot": false,
"headline": "Merge pull request #31 from veewee/feature/stab-optics",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-05-27T14:02:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "202a13454d01376125b3f2fe5ae375162cb615a5",
"body": "Ports Iso and Lens from the two-template form to the four-template\nprofunctor STAB form (Iso<S,T,A,B> / Lens<S,T,A,B>):\n\n- Concrete Iso/Lens invariant on all four slots (compose boundary\n detection via standard Psalm inference; AdjacentTemplateValidator removed).\n- IsoInterface/LensInterface covari\n[…]\na\n monoid, so empty -> identity and single -> passthrough are valid results.\n- New docs/stab-optics.md walkthrough; unit + SA tests including type-changing\n composition and single/empty composition.",
"is_bot": false,
"headline": "Migrate Iso/Lens to STAB form (Iso<S,T,A,B>)",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-05-27T13:43:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2e61a6b345d63f0654ce47a0a6370d95eab450ba",
"body": "Fix compose() boundary detection under covariant Iso/Lens templates",
"is_bot": false,
"headline": "Merge pull request #30 from veewee/fix/compose-stage-detection-issue-10",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-05-26T08:03:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df163d2dc76298844e1e77d77811b2ff33a52ec3",
"body": null,
"is_bot": false,
"headline": "Apply cs-fixer to AdjacentTemplateValidator",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-05-26T07:58:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42adb79191b41fe901d8a52630783b583b616d7d",
"body": "After making Iso/Lens templates covariant (#9), Psalm no longer flagged\ncompose() calls where adjacent isos/lenses don't line up (e.g.\ncompose(Iso<A,B>, Iso<C,C>, Iso<C,D>)) because covariant template\ninference silently widens the shared boundary to a union.\n\nAdd a FunctionReturnTypeProvider hook on\n[…]\ns their TGenericObject template\nparams, and emits InvalidArgument when arg[i]'s right template and\narg[i+1]'s left template are not mutually contained (i.e. not\nequivalent up to subtyping).\n\nFixes #10",
"is_bot": false,
"headline": "Detect compose() boundary mismatches under covariant Iso/Lens templates",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-05-26T07:56:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "49ace5109fc63f28438fc068d7d94744583df90a",
"body": "Split into PSL components and Bump PHP to 84",
"is_bot": false,
"headline": "Merge pull request #27 from veewee/psl-components",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-03-27T06:25:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f08d5caa3c239f5867eef26f29a5fef6d2dfad3e",
"body": null,
"is_bot": false,
"headline": "Split into PSL components and Bump PHP to 84",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-03-27T06:23:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "52731a6cb860f22d83b3ad6323e3517f73b6f60b",
"body": "Optimize properties_set to clone once instead of per property",
"is_bot": false,
"headline": "Merge pull request #26 from veewee/feature/properties-set-clone-once",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-03-26T17:30:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8adecba5adcb27ed5420ae4e61870644aa24f483",
"body": "When setting multiple properties, the previous implementation cloned\nthe object N times (once per property_set call). Now clones once and\nsets all properties on the single clone directly.\n\nFor an object with 9 properties, this roughly halves the cost of\nproperties_set (from ~10us to ~5.5us in php-soap/encoding benchmarks).",
"is_bot": false,
"headline": "Optimize properties_set to clone once instead of per property",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-03-26T14:12:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d74e2c7dafeba720d91c17666dbbacfd5316e01b",
"body": "Replace azjezz/psl with php-standard-library/php-standard-library",
"is_bot": false,
"headline": "Merge pull request #25 from veewee/replace-psl-package",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-03-19T07:03:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "305a076b1721bb4a481511f0a950ca27868f80c6",
"body": "The PSL package moved to a new vendor name. Allow versions ^3.0 || ~4.0 || ^5.0 || ^6.0.",
"is_bot": false,
"headline": "Replace azjezz/psl with php-standard-library/php-standard-library",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-03-19T07:02:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b16d6d6048fc58e23821c6be6357e52306086867",
"body": "Allow PSL 5.x",
"is_bot": false,
"headline": "Merge pull request #24 from veewee/psl5",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-03-11T14:56:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "63136e844b342eb4ea640715d4a5e1fe0a00162d",
"body": null,
"is_bot": false,
"headline": "Allow PSL 5.x",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2026-03-11T14:55:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ba508a2a85a92eaeac3cf6424b6871b563989f7",
"body": "Upgrade PHP project to support PHP 8.5",
"is_bot": false,
"headline": "Merge pull request #23 from veewee/php-85-upgrade",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2025-10-14T12:20:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49d32f60eff1d8825699aeee90b30977a90810ca",
"body": null,
"is_bot": false,
"headline": "Manual fixes",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2025-10-14T12:17:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d6fa976de760abc3748bdc544a2e88579d10a735",
"body": "- Remove PHP 8.2 support and add PHP 8.5 support in composer.json and workflows\n- Update dependencies:\n - azjezz/psl to ~4.0 range\n - phpunit/phpunit to ~12.3 range\n - vimeo/psalm to ~6.13 range\n - php-cs-fixer/shim to ~3.88 range\n - infection/infection to ^0.31.7\n- Update GitHub workflows to u\n[…]\ne\"\n- Convert PHPUnit test dataProvider docblock annotations to PHP attributes\n- All tests, code style checks, and static analysis pass successfully\n\nCode changes performed by GitHub Copilot CLI agent.",
"is_bot": false,
"headline": "Upgrade PHP project to support PHP 8.5",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2025-10-14T12:12:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "aa5fae14270a20bb89506615b2ef950d84e06a74",
"body": "…es-actions\n\nInfer properties_get and properties_set settings.",
"is_bot": false,
"headline": "Merge pull request #22 from veewee/psalm-plugin-for-multiple-properti…",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2025-02-06T06:20:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5cb212bcac80ea7311652aeddf9908b5623ead9b",
"body": "…ing the tests not trustworthy",
"is_bot": false,
"headline": "Disable psalm for php 8.1 : Objects are always considered dynamic mak…",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2025-02-06T06:17:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c892747c6ce419e0c48f0fc10b86ac192aad143c",
"body": null,
"is_bot": false,
"headline": "Infer properties_get and properties_set settings.",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2025-02-06T06:12:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9db448ee1f0c53e6521fecac1c3cb0f19dd7b6a7",
"body": "Let psalm known assignments of unknown properties",
"is_bot": false,
"headline": "Merge pull request #21 from veewee/add-psalm-unknown-property-issue",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2025-01-24T15:18:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8a8880d87ce65b0394eee8372eb5395fc94daf8e",
"body": null,
"is_bot": false,
"headline": "Let psalm known assignments of unknown properties",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2025-01-24T15:16:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f78784b1da5bbeddb6868524f11dda9fd9c1e81",
"body": "Introduce readonly lenses",
"is_bot": false,
"headline": "Merge pull request #20 from veewee/readonly-lens",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-12-19T12:01:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46bd40104ff1340884459505136e1d9b83b799f6",
"body": null,
"is_bot": false,
"headline": "Introduce readonly lenses",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-12-19T11:51:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5d015ba9b3005ee9636d26f7a379c9868af4da0",
"body": "Add PHP 8.4 support",
"is_bot": false,
"headline": "Merge pull request #19 from veewee/php84",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-10-25T06:29:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6191e43afef13bedbe3f4c52057ebc2fece437ce",
"body": null,
"is_bot": false,
"headline": "Add PHP 8.4 support",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-10-25T06:27:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "33fff7748bf60d7d5b7c5da4f1627d68640f1b21",
"body": "Bump PSL",
"is_bot": false,
"headline": "Merge pull request #18 from veewee/bump-psl",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-09-06T10:10:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ced9f4990044c09865d8e64a553ad6afa60e849",
"body": null,
"is_bot": false,
"headline": "Bump PSL",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-09-06T10:08:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3be0aaa609589224a8eb01db751efef1ef16d6e2",
"body": "Remove duplicate properties indexing",
"is_bot": false,
"headline": "Merge pull request #16 from veewee/duplicate-indexing",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-18T06:44:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50c08e7c7cb45e25d70848cb16d946d14a503ed6",
"body": null,
"is_bot": false,
"headline": "Remove duplicate properties indexing",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-18T06:41:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8b0b2f6c38876cf3ab23580420c7108e4c7b514d",
"body": "…ate-is-set\n\nOnly filter properties when predicate is set",
"is_bot": false,
"headline": "Merge pull request #15 from veewee/only-filter-properties-when-predic…",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-14T05:31:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16f0fb015fb7fff5ecff814e66536cd24536fe09",
"body": null,
"is_bot": false,
"headline": "Only filter properties when predicate is set",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-14T05:29:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "627d428da18d8ec582437a69007852973eb59018",
"body": "Introduce native function invocation rule + Speed up finding a single…",
"is_bot": false,
"headline": "Merge pull request #14 from veewee/getproperty-speed",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-13T11:25:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "065e21efb7a5bbe0eeabd2cb2e8d88892fc023df",
"body": "… property",
"is_bot": false,
"headline": "Introduce native function invocation rule + Speed up finding a single…",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-13T11:24:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "93e22efba2171ba4bd03874d9f8b5c0d811f85dd",
"body": "Set dynamic properties with predicate",
"is_bot": false,
"headline": "Merge pull request #13 from veewee/set-dynamic-props-with-predicate",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-12T07:44:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "05ad673028627c226a3ae2eb0e375366f5b912c9",
"body": null,
"is_bot": false,
"headline": "Set dynamic properties with predicate",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-12T07:43:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "34b377829b251d5cb6cff936b8984269575454ea",
"body": "Detect inherited private properties",
"is_bot": false,
"headline": "Merge pull request #12 from veewee/inherited-props",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-12T06:57:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ae49e8f59eb3e9d006034094ee1bfac88f694a5",
"body": null,
"is_bot": false,
"headline": "Detect inherited private properties",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-12T06:55:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "84edc567fa3f62f5ef38f5dd5a504b9f9c50799f",
"body": "Refactored class aproach",
"is_bot": false,
"headline": "Merge pull request #11 from veewee/refactored-class-aproach",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-12T05:53:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4374439e0bbbeb25a1f341423f7e70ab38f83c2f",
"body": null,
"is_bot": false,
"headline": "Add docs",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-12T05:51:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eb1a9dc846c0049101ceb5303a5a607218ccdbd3",
"body": null,
"is_bot": false,
"headline": "Fix qa",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-12T05:44:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30f13fa29284162927fe8335ed7e9941b8783457",
"body": "…e by a predicate",
"is_bot": false,
"headline": "Make properties related lenses, getters, setters and isos configurabl…",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-11T14:30:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f0950fd9a176a0a8db59cd7bf8d18aff1879dd8b",
"body": null,
"is_bot": false,
"headline": "Use new reflect types",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-11T14:04:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "949fce2613a495375ddd37c4e04940052a6c0cd1",
"body": null,
"is_bot": false,
"headline": "Add object based types and predicates",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-11T13:22:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "18198a422f9c0d5a0905b7631950e835839dc91b",
"body": "Make ISO / Lens templates covariant",
"is_bot": false,
"headline": "Merge pull request #9 from veewee/covariant-templates",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-06T12:58:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d663dd051f5790ed81950b6c815b9827e89bb246",
"body": null,
"is_bot": false,
"headline": "Make ISO / Lens templates covariant",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-06-06T12:57:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "caccab137fd603e1e6343b282687ce25ebb07a0c",
"body": "Small type improvements",
"is_bot": false,
"headline": "Merge pull request #7 from veewee/small-type-improvements",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-05-18T08:43:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7014b1001259161a3bb6024654b6d0ca51d1f93",
"body": null,
"is_bot": false,
"headline": "Small type improvements",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-05-18T08:41:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86ecfad91f2f2e86f6eaa02008e75c2a57dfd5ef",
"body": "Export interfaces for Lenses and Isos",
"is_bot": false,
"headline": "Merge pull request #6 from veewee/export-interfaces",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-05-03T13:33:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "48e71e04e3fc62acf8bdb6356428ce91d51e9578",
"body": null,
"is_bot": false,
"headline": "Export interfaces for Lenses and Isos",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-05-03T13:31:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "029a63148aebacbfc616697a25fcf0f5b5f7dcf6",
"body": "Split up Reflect into object_ and class_ specific functions",
"is_bot": false,
"headline": "Merge pull request #4 from veewee/class-attributes",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-01-30T11:30:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "017a8b1ffb283da2e9794f544674606936f64787",
"body": null,
"is_bot": false,
"headline": "Split up Reflect into object_ and class_ specific functions",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-01-30T11:28:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "830314c496b70b62aad8aadd66be5d3094db4eb0",
"body": "Fix typo in the docs",
"is_bot": false,
"headline": "Merge pull request #2 from jdreesen/patch-1",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2024-01-13T10:25:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "025a7c77adc33825b5ae367dca31f6d79dab6577",
"body": null,
"is_bot": false,
"headline": "Fix another typo",
"author_name": "Jacob Dreesen",
"author_login": "jdreesen",
"committed_at": "2024-01-13T10:11:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6bf5f312dae27a26f7d3afaea749e9aaeea104c4",
"body": null,
"is_bot": false,
"headline": "Fix typo in the docs",
"author_name": "Jacob Dreesen",
"author_login": "jdreesen",
"committed_at": "2024-01-13T10:06:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f0e8435495935fd06703add70b9183af3351b270",
"body": "Support dynamic objects and class attributes",
"is_bot": false,
"headline": "Merge pull request #1 from veewee/support-dynamic-object",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-12-03T14:29:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "00d1fa23ac73628b66354341d9429431d9a83478",
"body": null,
"is_bot": false,
"headline": "Support dynamic objects and class attributes",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-12-03T14:26:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e0aa1a6c012dc2bb3f387826ee59c8f428f8e12",
"body": null,
"is_bot": false,
"headline": "Improve composer meta",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-20T18:18:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a63b54071645df492f822609e53879b17e233c2",
"body": null,
"is_bot": false,
"headline": "Move the focus towards investigating the components",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-17T10:29:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c843a36555705a4c9a73461743cc400ebc2ca91",
"body": null,
"is_bot": false,
"headline": "Visualize lenses and isos",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-17T10:16:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf4625cf73986eb9b970332e7886bd5e762eb82f",
"body": null,
"is_bot": false,
"headline": "Visualize lenses and isos",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-17T10:14:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "72390360b06b23819e9ea7551e8e161c493c2921",
"body": null,
"is_bot": false,
"headline": "Moooaare tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-16T05:58:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "636f99e4a5e398f05ed4fcf16bb8160501049656",
"body": null,
"is_bot": false,
"headline": "Moooaare tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-16T05:57:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c889462cdb7128a534ada4a90ed5152ce87c3f00",
"body": null,
"is_bot": false,
"headline": "Mark broken tests as incomplete and finish up infection",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T21:12:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "009c7bdc33ed96fdd9226bc8c78df97d452ceb40",
"body": null,
"is_bot": false,
"headline": "Additional QA tools",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T21:04:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c894acd48b65b0fd4a332993894717a0b41d2a5",
"body": null,
"is_bot": false,
"headline": "Cs-fixer",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T20:56:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "11b587a5e6ff7098216ad832e5214eb7eb9d7ad1",
"body": null,
"is_bot": false,
"headline": "Moooaare tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T20:46:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "450559e774c3f43b50b9905262d10e426ad8f3bf",
"body": null,
"is_bot": false,
"headline": "Add tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T20:36:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0ab55fa86bf7b4efb0bf63f6464a438f1ed0e876",
"body": null,
"is_bot": false,
"headline": "Add tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T20:31:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "183edcc439b4bc200c4373147864971d7f224911",
"body": null,
"is_bot": false,
"headline": "Add tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T20:23:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9b5e33c231bae4d54e7ea4b42b3da7a1d01da7bd",
"body": null,
"is_bot": false,
"headline": "Add tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T20:16:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "efd1d1ea57023d5597b583c23818d0da5b133733",
"body": null,
"is_bot": false,
"headline": "Add tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T20:06:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c56e2d074417ba674547d4eefb190dc8d0229f9",
"body": null,
"is_bot": false,
"headline": "Add tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T19:50:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eb0c90c7579dae51c77d4ece6c99c98914575918",
"body": null,
"is_bot": false,
"headline": "Add tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T19:37:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9fa3208af692e15aaf11f2a9e39434ddbbf45e18",
"body": null,
"is_bot": false,
"headline": "Moooaare docs",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T18:49:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f73af43c25f4c9a7fca327c6c9c54443e151c52c",
"body": null,
"is_bot": false,
"headline": "Add docs",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T14:26:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eba6d7710bc9cb74eb968cad7d2406e0af5b14cd",
"body": null,
"is_bot": false,
"headline": "Introduce object_data iso",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T12:12:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "74250d6e73ae7efac82d2ac7e2b885193e38c3c1",
"body": null,
"is_bot": false,
"headline": "Add compose type inferer",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T07:44:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "74fe9ef148bcdc7bde6dfe3a62acb41d8ee33247",
"body": null,
"is_bot": false,
"headline": "Improve psalm tests",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T07:31:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a09a5799e6953fe43c9748aa16e842f426fe823",
"body": null,
"is_bot": false,
"headline": "Improve API",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-15T06:58:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2ce61d7d56d38e58086577c68a1149ba1690b391",
"body": null,
"is_bot": false,
"headline": "Introduce array index function",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-14T14:58:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "28ffa99a03f657627d0809f7c581a7c7d9e45421",
"body": null,
"is_bot": false,
"headline": "Add properties lens",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-14T14:28:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5333028d19b8384094636423ee6fe79e9ca9fa6a",
"body": null,
"is_bot": false,
"headline": "Split namespaces",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-14T14:11:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba131f1c625d7a2e0f03b6d0f19f04e5e5f9b896",
"body": null,
"is_bot": false,
"headline": "Provide a more helpful optional lens",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-14T14:10:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7dfc655835839b7310e399b45989ed41d90213cd",
"body": null,
"is_bot": false,
"headline": "Improved error handling",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-14T13:38:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee0bee78fbbab041fbb14da0ffa53c2d5fd7e5fa",
"body": null,
"is_bot": false,
"headline": "Improve types",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-13T14:31:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a35298d3c49658d6f90c124ca71fe0cc6f90ffb",
"body": null,
"is_bot": false,
"headline": "Add path lens",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-13T14:03:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c74eb7466020b2dd972773b5fc69597cf7f8cf3b",
"body": null,
"is_bot": false,
"headline": "More error handling",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-13T13:48:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "216a3f94ccbbb313ab6e13ae2bed67dcf105b963",
"body": null,
"is_bot": false,
"headline": "Introduce Iso, optional lenses, small improvements",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-13T13:36:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b23c6f0a9069c198855c93aeb8cb37ef5f7b8b40",
"body": null,
"is_bot": false,
"headline": "Add inspirationals",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-13T10:51:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c01e575da0df9d079b4808d3128029277fc585e4",
"body": null,
"is_bot": false,
"headline": "Improve types",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-13T09:28:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "335e899d42d4e53fdeed439f5e2a97adcbb400c8",
"body": null,
"is_bot": false,
"headline": "Introduce basic lens",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-13T07:44:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ade8bd5b6507286b9e5fd4270b1e0310e7733753",
"body": null,
"is_bot": false,
"headline": "Small psalm plugin test",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-13T06:25:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6d60942f43fc461c74bf5213be52f32584b39eb",
"body": null,
"is_bot": false,
"headline": "Initial commit",
"author_name": "Toon Verwerft",
"author_login": "veewee",
"committed_at": "2023-11-13T06:15:45Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 22,
"commits_last_year": 19,
"latest_release_at": "2026-05-29T09:55:42Z",
"latest_release_tag": "1.0.1",
"releases_from_tags": false,
"days_since_last_push": 30,
"active_weeks_last_year": 6,
"days_since_latest_release": 60,
"mean_days_between_releases": 54.4
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 57,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "veewee/reflecta",
"exists": true,
"license": "MIT",
"keywords": [
"reflection",
"array-access",
"lenses",
"optics",
"isomorphisms"
],
"ecosystem": "packagist",
"matches_repo": true,
"registry_url": "https://packagist.org/packages/veewee/reflecta",
"is_deprecated": false,
"latest_version": "1.0.1",
"repository_url": "https://github.com/veewee/reflecta",
"versions_count": 22,
"total_downloads": 472806,
"dependents_count": 2,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 53672,
"first_published_at": null,
"latest_published_at": "2026-05-29T09:47:19Z",
"latest_version_yanked": null,
"days_since_latest_publish": 60
}
]
},
"popularity": {
"forks": 1,
"stars": 13,
"watchers": 2,
"fork_history": {
"days": [
{
"date": "2024-01-13",
"count": 1
}
],
"complete": true,
"collected": 1,
"total_forks": 1
},
"star_history": null,
"open_issues_and_prs": 1
},
"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": 11781,
"source_files_sampled": 99,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"composer.json"
],
"advisories": {
"error": "No resolved dependencies carried a version and a supported ecosystem",
"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": 13,
"direct_affected_count": 0
},
"ecosystems": [
"packagist"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "infection/infection",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php-cs-fixer/shim",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php-standard-library/dict",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php-standard-library/foundation",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php-standard-library/fun",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php-standard-library/iter",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php-standard-library/option",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php-standard-library/result",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "php-standard-library/vec",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "phpunit/phpunit",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "veewee/composer-run-parallel",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "vimeo/psalm",
"direct": false,
"version": null,
"ecosystem": "packagist"
}
],
"collected": true,
"truncated": false,
"total_count": 13,
"direct_count": 0,
"indirect_count": 13
}
},
"maintainership": {
"issues": {
"open_prs": 1,
"merged_prs": 25,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 2,
"closed_unmerged_prs": 6
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "veewee",
"commits": 93,
"avatar_url": "https://avatars.githubusercontent.com/u/1618158?v=4"
},
{
"type": "User",
"login": "jdreesen",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/424602?v=4"
},
{
"type": "User",
"login": "raphaelstolt",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/48225?v=4"
}
],
"contributors_sampled": 3,
"top_contributor_share": 0.969
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"analyzers.yaml",
"code-style.yaml",
"tests.yaml"
],
"has_docs_dir": true,
"linter_configs": [
".php-cs-fixer.dist.php"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"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": 6,
"reason": "8 out of 13 merged PRs checked by a CI test -- score normalized to 6",
"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": 0,
"reason": "Found 1/13 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"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": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 6,
"reason": "8 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 6",
"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": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "5b8806dfb534bc69ba4b493a4858ad5c13b30272",
"ran_at": "2026-07-29T04:21:24Z",
"aggregate_score": 3.6,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-29T04:06:27Z",
"oldest_open_prs": [
{
"number": 34,
"created_at": "2026-06-29T04:06:20Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-05-29T09:47:20Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/veewee/reflecta",
"host": "github.com",
"name": "reflecta",
"owner": "veewee"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": "The weighted overall 57 is calibrated to 60 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 57,
"calibrated": 60,
"calibration": "2026-08-02"
}
}
],
"value": 60,
"inputs": {
"security": 36,
"vitality": 67,
"community": 44,
"governance": 60,
"calibration": "2026-08-02",
"engineering": 76,
"ai_readiness": 35,
"weighted_overall_raw": 57
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 67,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 51,
"inputs": {
"commits_last_year": 19,
"human_commit_share": 1,
"days_since_last_push": 30,
"active_weeks_last_year": 6
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 30 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 30
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "6/52 weeks with commits",
"points": 4.2,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 6
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "19 commits in the last year",
"points": 11.7,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 19
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "8 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 92,
"inputs": {
"releases_count": 22,
"latest_release_tag": "1.0.1",
"releases_from_tags": false,
"days_since_latest_release": 60,
"mean_days_between_releases": 54.4
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "22 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 22
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 60 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 60
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~54.4 days",
"points": 19.8,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 54.4
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "exceptional",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 65,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 65 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 65
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "weak",
"name": "Community & Adoption",
"value": 44,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 18,
"inputs": {
"forks": 1,
"stars": 13,
"watchers": 2,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "13 stars",
"points": 17.5,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 13
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "1 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 1
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "2 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 2
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"readme_badge_services": [],
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 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": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "good",
"name": "Ecosystem adoption (downloads)",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"packages": [
"veewee/reflecta"
],
"dependents": 2,
"ecosystems": "packagist",
"total_downloads": 472806,
"monthly_downloads": 53672
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "53,672 downloads/month across packagist",
"points": 63.1,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 53672,
"ecosystems": "packagist"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "2 packages depend on it",
"points": 3.2,
"status": "partial",
"details": [
{
"code": "registry_dependents",
"params": {
"count": 2
}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 60,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 3,
"top_contributor_share": 0.969
},
"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 97% of commits",
"points": 0.7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 97
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "3 contributors",
"points": 4.1,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 3
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"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": 76,
"inputs": {
"merged_prs": 25,
"open_issues": 0,
"closed_issues": 2,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 6,
"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": "100% of issues closed",
"points": 42,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "25/31 decided PRs merged",
"points": 24.2,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 25,
"decided": 31
}
}
],
"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 1/13 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 62,
"inputs": {
"followers": 116,
"owner_type": "User",
"is_verified": null,
"owner_login": "veewee",
"public_repos": 113,
"account_age_days": 5226
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "116 followers of veewee",
"points": 14.9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 116,
"login": "veewee"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "113 public repos, account ~14 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 113
}
},
{
"code": "account_age_years",
"params": {
"years": 14
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"veewee/reflecta"
],
"ecosystems": "packagist",
"any_deprecated": false,
"min_days_since_publish": 60
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on packagist",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "packagist"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 60 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 60
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "22 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 22
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 76,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"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": ".php-cs-fixer.dist.php",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".php-cs-fixer.dist.php"
}
}
],
"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": "8 out of 13 merged PRs checked by a CI test -- score normalized to 6",
"points": 12,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [
"array-access",
"isomorphisms",
"lenses",
"optics",
"reflection",
"hacktoberfest"
],
"has_wiki": false,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "6 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 6
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "weak",
"name": "Security",
"value": 36,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "weak",
"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": 36,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 13,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 5,
"scorecard_aggregate": 3.6
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "8 out of 13 merged PRs checked by a CI test -- score normalized to 6",
"points": 1.5,
"status": "partial",
"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 1/13 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"status": "partial",
"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.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "8 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 6",
"points": 4.5,
"status": "partial",
"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": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"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": 5
},
"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": "weak",
"name": "AI Readiness",
"value": 35,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 17,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.312,
"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": "30 of 96 human commits state their intent (structured subject or explanatory body)",
"points": 16.7,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 30,
"sampled": 96
}
}
],
"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": 42,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"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": ".php-cs-fixer.dist.php",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".php-cs-fixer.dist.php"
}
}
],
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 96",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 96
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "dependency automation configured, none observed in the sampled commits",
"points": 5,
"status": "partial",
"details": [
{
"code": "dependency_bot_config_only",
"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": "PHP",
"largest_source_bytes": 11781,
"source_files_sampled": 99,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "PHP without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "PHP"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/99 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 99,
"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)."
}
],
"metrics_version": "2.2.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"No resolved dependencies carried a version and a supported ecosystem"
],
"report_type": "repository",
"generated_at": "2026-07-29T04:21:38.623991Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/v/veewee/reflecta.svg",
"full_name": "veewee/reflecta",
"license_state": "standard",
"license_spdx": "MIT"
}