原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 46210,
"has_wiki": true,
"homepage": "https://finos.github.io/open-resource-broker/",
"languages": {
"C#": 173468,
"Go": 188785,
"Nix": 1784,
"Java": 221431,
"Mako": 1365,
"Shell": 160249,
"Kotlin": 164661,
"Python": 17531062,
"Makefile": 88692,
"Batchfile": 633,
"Dockerfile": 4674,
"JavaScript": 662,
"TypeScript": 148320,
"Go Template": 1582
},
"pushed_at": "2026-07-28T12:21:21Z",
"created_at": "2025-07-10T10:25:15Z",
"owner_type": "Organization",
"updated_at": "2026-07-28T12:23:09Z",
"description": "A unified API for orchestrating and provisioning compute capacity programmatically. Define what you need in a template, request it, track it, return it — through a CLI, REST API, Python SDK, or MCP server.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "main",
"license_spdx_raw": "Apache-2.0",
"primary_language": "Python",
"significant_languages": [
"Python"
]
},
"owner": {
"blog": "https://landscape.finos.org",
"name": "The Fintech Open Source Foundation (www.finos.org)",
"type": "Organization",
"login": "finos",
"company": null,
"location": null,
"followers": 1572,
"avatar_url": "https://avatars.githubusercontent.com/u/35377814?v=4",
"created_at": "2018-01-12T16:57:09Z",
"is_verified": null,
"public_repos": 191,
"account_age_days": 3119
},
"license": {
"state": "standard",
"spdx_id": "Apache-2.0",
"raw_spdx": "Apache-2.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.8.5",
"kind": "patch",
"published_at": "2026-07-24T11:52:12Z"
},
{
"tag": "v1.8.4",
"kind": "patch",
"published_at": "2026-07-23T10:02:11Z"
},
{
"tag": "v1.8.3",
"kind": "patch",
"published_at": "2026-07-17T11:06:44Z"
},
{
"tag": "v1.8.2",
"kind": "patch",
"published_at": "2026-07-17T08:39:03Z"
},
{
"tag": "v1.8.1",
"kind": "patch",
"published_at": "2026-07-16T15:05:13Z"
},
{
"tag": "v1.8.0",
"kind": "minor",
"published_at": "2026-07-14T14:22:51Z"
},
{
"tag": "v1.7.0",
"kind": "minor",
"published_at": "2026-06-23T12:00:44Z"
},
{
"tag": "v1.6.2",
"kind": "patch",
"published_at": "2026-05-28T14:12:49Z"
},
{
"tag": "v1.6.1",
"kind": "patch",
"published_at": "2026-05-28T13:15:30Z"
},
{
"tag": "v1.6.0",
"kind": "minor",
"published_at": "2026-05-28T11:22:30Z"
},
{
"tag": "v1.5.2",
"kind": "patch",
"published_at": "2026-04-02T17:38:08Z"
},
{
"tag": "v1.5.1",
"kind": "patch",
"published_at": "2026-03-23T14:06:35Z"
},
{
"tag": "v1.5.0",
"kind": "minor",
"published_at": "2026-03-23T11:40:13Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2026-03-18T20:16:04Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2026-03-16T14:35:04Z"
},
{
"tag": "v1.2.2",
"kind": "patch",
"published_at": "2026-03-07T02:01:43Z"
},
{
"tag": "v1.2.1",
"kind": "patch",
"published_at": "2026-03-07T01:40:54Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2026-03-07T00:40:58Z"
},
{
"tag": "v1.1.2",
"kind": "patch",
"published_at": "2026-01-28T15:52:48Z"
},
{
"tag": "v1.1.1",
"kind": "patch",
"published_at": "2026-01-21T13:56:36Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2026-01-21T12:28:49Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2026-01-06T17:23:18Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2025-09-04T16:10:09Z"
},
{
"tag": "v0.1.0rc0",
"kind": "other",
"published_at": "2025-09-02T13:31:44Z"
},
{
"tag": "v0.1.0a1",
"kind": "other",
"published_at": "2025-09-02T13:31:37Z"
},
{
"tag": "v0.0.1rc1",
"kind": "other",
"published_at": "2025-09-02T13:31:30Z"
},
{
"tag": "v0.0.1rc0",
"kind": "other",
"published_at": "2025-09-02T13:31:25Z"
},
{
"tag": "v0.0.1a1",
"kind": "other",
"published_at": "2025-09-02T13:31:10Z"
}
],
"recent_commits": [
{
"oid": "68891fcc24071eb5c20f2f64a871137300bfc77f",
"body": "fix: recover review fixes (audit log, HTTPS proxy, config, --wait, SSE) + enable npm OIDC publishing",
"is_bot": false,
"headline": "Merge pull request #351 from finos/fix/recover-review-fixes",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T12:21:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d42b607e7f03b0a10516a65e55bcb5816e76506e",
"body": "Add ASGI-level tests for ForwardedProtoMiddleware (trusted-proxy scheme\nrewrite, untrusted-peer skip, websocket ws/wss normalisation, malformed\nand appended X-Forwarded-Proto headers) and unit tests for the\nloopback-admin token machinery in the server factory (token acceptance,\nnon-ASCII rejection, \n[…]\n\nexception handler, and system endpoints. Also assert the SSE client\ndiscards a non-integer id: line rather than adopting it as a resume\ncursor. These verify real behaviour at the port/boundary seams.",
"is_bot": false,
"headline": "test: cover forwarded-proto middleware and loopback-admin token auth",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T11:26:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "26dded7a05e36247bf3fd806e716b330535c1a13",
"body": "A subscriber is registered before the history snapshot is read, so an event\npublished in that window landed in both the replayed history and the live\nqueue and was streamed twice with the same id:. Track the highest seq_id\nreplayed from history and skip any live item at or below it, so each event is\ndelivered exactly once across the history-to-live handover.",
"is_bot": false,
"headline": "fix(sse): stop emitting the history/live overlap event twice",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T11:09:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "552df213c2842fd4dd268643b33609cc576f3001",
"body": "The per-process event sequence counter restarted from 1 on every boot, so a\nclient reconnecting with a Last-Event-ID from a previous process could match\nfreshly-issued low ids and silently skip the genuinely-new events published\nafter the restart. Seed the counter from a wall-clock boot base so each\n[…]\nw that base — a stale cross-restart cursor now always\ntriggers a full resync. The id: cursor stays a single integer well within the\nJS safe-integer range, so no wire, spec, or client change is needed.",
"is_bot": false,
"headline": "fix(sse): resync reconnects whose cursor predates a server restart",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T11:09:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a60f0a3332179ad22e76df295807dafdc158bf8e",
"body": "The status --wait poll incremented elapsed time by a constant poll interval\nper loop, ignoring how long each status fetch actually took. A slow provider\ncould therefore push the total wait well past the caller's timeout. Measure\nelapsed time with time.monotonic() deltas so fetch latency counts toward the\nbudget and the wait never overruns timeout_seconds. The consecutive-error\nabort is unchanged. Tests drive the timeout with a fake monotonic clock.",
"is_bot": false,
"headline": "fix(orchestration): bound --wait polling by true wall-clock time",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T11:08:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "154e1a382e051adbbf3890165213e4dea7d7e37e",
"body": "The requests status handler forwards the --wait and --timeout flags into\nGetRequestStatusInput, but that wiring had no direct coverage. Add unit tests\nasserting the DTO receives wait=True and the timeout value when the flags are\npassed, and the documented defaults (wait=False, timeout=300) otherwise, so a\nfuture regression that drops the forwarding fails fast.",
"is_bot": false,
"headline": "test(cli): assert requests-status --wait/--timeout reach the status DTO",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T11:08:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2658e03294fd0539bd03007b06dd106510a5c44b",
"body": "npm trusted publishing (OIDC) to registry.npmjs.org requires Node >= 22.14.0\nin addition to npm CLI >= 11.5.1. The publish job set up Node 20, so the OIDC\nexchange never ran and npm fell back to token auth, failing with ENEEDAUTH on\nthe trusted path (token and GitHub Packages publishing were unaffected because\nthey do not use OIDC). Bump the publish job to Node 22 and log the active\nnode/npm versions before publishing so an auth failure is diagnosable.",
"is_bot": false,
"headline": "ci(sdk): use Node 22 for npm publish so OIDC trusted publishing works",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:28:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f385c5ebb55305a617cb86d31ef5acfc59307540",
"body": null,
"is_bot": false,
"headline": "chore(sdk): regenerate OpenAPI spec for SSE reconnect semantics",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:28:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5ce3cf092bf3db83a546928479e74dfec0c8120",
"body": "The global SSE stream assigned a monotonic seq_id per event internally but\nnever sent it to clients, so a reconnecting subscriber re-opened /events with\nno cursor and silently lost every event that occurred during the outage. A\nmissed terminal request event left the row stuck 'in_progress' until a m\n[…]\ntinel triggers\na full row refetch so a too-large gap self-heals.\n\nWire change is additive: the id: line is standard SSE and the payload shape is\nunchanged, so existing non-UI consumers are unaffected.",
"is_bot": false,
"headline": "fix(sse): transmit event seq id so reconnects replay missed events",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:28:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6d680895c6307d89378b134af2a45c7a9b00bb9d",
"body": "The SSE row patch updated only the status field, leaving the machine\ncounts and progress bar showing stale values after a status transition.\nPatch through any count/progress source fields the event carries so the\nbadge, counts columns and progress bar move together, matching what a\nfull refresh would show. A completed event derives its fulfilled count\nfrom the machine_ids it carries.",
"is_bot": false,
"headline": "fix(ui): refresh row counts and progress on live status events",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:28:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58d546c9c87a88ded0d5d1ff36fb83230bced5e6",
"body": "_poll_until_terminal treated any error entry as terminal, so a single\ntransient provider blip on the first poll ended the wait and reported\nfailure for a still-healthy request. Tolerate up to\nMAX_CONSECUTIVE_POLL_ERRORS consecutive transient sync errors before\ngiving up, in line with the acquire/return polling loops. A genuine\nterminal status (a real failure, or not_found) still stops the poll\nimmediately.",
"is_bot": false,
"headline": "fix(orchestration): tolerate transient sync errors in --wait polling",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:28:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61f43ea710d3f2ec3ab69742562b86f7682dc1df",
"body": "ConfigTypeConverter.set() replaces a leaf value in memory, but save()\ndeep-merged dict edits into the on-disk config, retaining stale sibling\nkeys the in-memory value had dropped. After a reload the persisted and\nin-memory state diverged. Record set() edits as replace paths so save()\noverwrites the on-disk value at those paths while update() edits keep\ntheir deep-merge semantics.",
"is_bot": false,
"headline": "fix(config): persist set() dict edits as replace, not deep-merge",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:28:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c24e42be669118ab3f15d5ba370963ea3eee74cd",
"body": "When require_https is enabled and ORB runs behind a reverse proxy that\nterminates TLS and forwards plain HTTP, the request scheme seen by the app is\n'http', so HTTPSRedirectMiddleware issues a 307 to https://, the proxy forwards\nthe follow-up as HTTP again, and the client is trapped in an infinite l\n[…]\nrusted or direct clients cannot spoof the scheme, so HTTPS\nenforcement is not weakened. When require_https is set without trusted_proxies,\na warning explains the loop risk behind off-host TLS proxies.",
"is_bot": false,
"headline": "fix(api): prevent HTTPS redirect loop behind TLS-terminating proxy",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:28:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b4df6b51a94e95bb46935b8ed90d0882bf2d549a",
"body": "…ndent\n\nThe JSON audit sink dropped every structured security field. AuthAuditLogger\npasses fields (event_type, user_id, client_ip, path, method, reason,\nauth_strategy) via stdlib extra=, which sets them as top-level LogRecord\nattributes, but JsonFormatter only merged a record.extra sub-dict that st\n[…]\nt filtered out its own INFO events, producing a\nsilent 0-byte audit trail. setup_audit_logger now pins orb.audit (and its\nhandler) to INFO so audit records always emit regardless of the app log level.",
"is_bot": false,
"headline": "fix(logging): make security audit trail attributable and level-indepe…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:28:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f4c8117fec2c7508a772b269e2146ae830684b44",
"body": "fix(health): split liveness/readiness and stop optional providers forcing 503",
"is_bot": false,
"headline": "Merge pull request #350 from finos/worktree-agent-a4d60ed4a30386814",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:18:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f28fdf80056c616c83f1e0fb867a2e3f689245c0",
"body": "…n failure\n\nReplace a bare except/pass in the Kubernetes strategy's health-check\nregistration with a debug log, matching the AWS strategy. The fallback\nbehaviour is unchanged — a config-port failure must not fail health-check\nregistration — but the reason is now observable instead of silent.",
"is_bot": false,
"headline": "refactor(health): log instead of swallowing k8s config-port resolutio…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T10:02:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "863d81f0fea8100f42e4a7e3dc5500a44b1a5bef",
"body": "… provider's readiness\n\nBroaden the EC2 connectivity check to catch BotoCoreError as well as\nClientError: an unreachable endpoint raises EndpointConnectionError /\nConnectTimeoutError (BotoCoreError subclasses, not ClientError), which\npreviously escaped the handler and surfaced as unhealthy, forcing\n\n[…]\n.\n\nstorage.deserialize stays classified as a non-readiness signal: a\nskipped-row counter reflects incomplete list results, not an inability\nto serve reads (already covered by the core database check).",
"is_bot": false,
"headline": "fix(health): treat EC2 connectivity failures as degraded, gate a sole…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T09:58:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1cba87e27ad76cb04ee39ca0d95e0399dac9e160",
"body": "Add hand-written client methods for the new GET /livez and GET /readyz\nendpoints across the Go, TypeScript, Java, Kotlin, and C# SDKs, and\nupdate each SDK's operation-completeness check to cover them.",
"is_bot": false,
"headline": "chore(sdk): add liveness/readiness operations to language SDKs",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T09:53:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7637a0266d86af8b4ef4787e3c616528a135f185",
"body": null,
"is_bot": false,
"headline": "chore(sdk): regenerate OpenAPI spec for liveness/readiness endpoints",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T09:51:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e143e46791d2e96996878590fa99417288d5532b",
"body": "Connectivity checks were registered for every enabled provider instance,\nso a secondary provider pointed at an unreachable API would register a\ncheck that dragged the aggregate status down. Registration is now gated\non the default/active instance (explicit default_provider_instance, else\nthe first e\n[…]\n provider-selection precedence. A\nsecondary instance no longer registers a connectivity check. Gating fails\nopen when the instance or config is unknown so single-provider\ndeployments keep their probe.",
"is_bot": false,
"headline": "fix(health): scope provider connectivity checks to the default instance",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T09:51:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ba5d6b662b8c41495156406060d5c88cb936a737",
"body": "Add dedicated liveness and readiness probes alongside the existing\n/health endpoint (which is unchanged for back-compat and full detail):\n\n- /livez returns 200 whenever the process is up and never gates on any\n dependency or provider, so an unreachable downstream cannot trigger a\n needless restart\n[…]\nks are now classified by kind (core, provider, system) at\nregistration time, and readiness is derived from core checks only. Both\nprobes are public (auth-exempt), read-only-allowed, and audit-skipped.",
"is_bot": false,
"headline": "feat(api): add /livez and /readyz probe endpoints",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T09:51:00Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "35453103c104f7f7982daace6d85b903d4144606",
"body": "An unreachable provider API (STS/EC2/Kubernetes) previously reported\n'unhealthy', which forced the aggregate /health status to 'unhealthy'\nand returned HTTP 503 even when the core service was fully functional.\nA single unreachable optional provider should not take the whole\nendpoint down, so provider-connectivity probes now report 'degraded'\n(mapped to HTTP 200). Genuine core-dependency failures are unaffected.",
"is_bot": false,
"headline": "fix(health): report provider connectivity failures as degraded",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T09:51:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "efb3c657bcb6625eadf4e445ff03d22ed5cace46",
"body": "…g-networking\n\ndocs: fix MicroVM IAM guidance and add sizing/networking sections",
"is_bot": false,
"headline": "Merge pull request #352 from finos/docs/fix-microvm-iam-and-add-sizin…",
"author_name": "Alex",
"author_login": "canonicalname",
"committed_at": "2026-07-28T09:19:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b6c2f3b1cdb253370e3ccf6c10ddb59624fedff",
"body": "The MicroVM docs incorrectly stated that a single IAM role should be\nused for both image build and runtime execution. AWS documents these as\nseparate roles (buildRoleArn vs executionRoleArn) and recommends\nseparation for least-privilege. This commit:\n\n- Replaces the single-role guidance with proper \n[…]\noritative AWS documentation throughout\n- Removes inapplicable suspend/resume claim from the intro\n- Updates E2E test to use properly separated build and execution roles\n with least-privilege policies",
"is_bot": false,
"headline": "docs: fix MicroVM IAM guidance and add sizing/networking sections",
"author_name": "Alex Kimber",
"author_login": "canonicalname",
"committed_at": "2026-07-28T09:12:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a1bdbea2368a67dccc960ed887f8b4cd38c5e668",
"body": "feat: AWS resource discovery endpoint, RBAC claim extraction, and orchestrator error handling",
"is_bot": false,
"headline": "Merge pull request #349 from finos/chore/finish-pr3-aws-rbac",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:35:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e38bd85b604d8298d503cf75c13e6a5652ed240",
"body": "The resource-discovery endpoint caught LookupError to map an unregistered\nprovider (or null strategy) to 404. But KeyError and IndexError are\nLookupError subclasses, so a genuine server-side failure while parsing an\nAWS response (e.g. an IPv6-only subnet with no CidrBlock) was misreported\nas \"provid\n[…]\ndistinct vpc_ids could grow the cache without bound.\nThe cache is now a bounded LRU: each put sweeps expired entries and evicts\nthe oldest once a hard size cap is reached, preserving the 5-minute TTL.",
"is_bot": false,
"headline": "fix(api): stop discovery errors masquerading as 404 and bound the cache",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "329e5546e730f4b53c584b27859c8d68e6b3c30c",
"body": "The OpenAPI spec now declares a provider resource-discovery endpoint\n(GET /providers/discover/{provider_api}/{resource_type}), but the\nhand-written Go, TypeScript, Java, Kotlin, and .NET clients did not\nexpose it. Their operation-completeness checks therefore failed: the\nspec declared an operationId\n[…]\nthe\nexisting provider operations and forwarding the optional vpc_id query\nparameter, and update each completeness check to the new operation\ncount so the cross-language coverage guarantee holds again.",
"is_bot": false,
"headline": "feat(sdk): add resource-discovery operation to all language clients",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e1d0a70779ba908a17f1d3daf309a160f676b2af",
"body": "Export the committed spec from the live routes so it includes the new\nprovider resource-discovery path, keeping the SDK generators in sync with\nthe API.",
"is_bot": false,
"headline": "chore(sdk): regenerate OpenAPI spec for the discovery endpoint",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a2f36fd10c0c447aad9c5ce23fe966717ae964e8",
"body": "The expired-entry test forced expiry by stamping the cache entry at 0.0,\nassuming that is always past the 5-minute TTL. Cache timestamps use\ntime.monotonic(), whose zero point is arbitrary and, on a freshly-booted\nhost, can be smaller than the TTL — leaving the entry non-expired and the\nrefresh untriggered. Rewind the stored timestamp relative to the current\nmonotonic reading so expiry is deterministic on any host.",
"is_bot": false,
"headline": "test(api): rewind discovery-cache expiry relative to monotonic clock",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67914e8e41b10468b53ae3401fb818d9c7fb00c5",
"body": "The resource-discovery service returned an empty list on any EC2 error, so a\ntransient failure (throttling, network blip, credential refresh) was\nindistinguishable from an account that genuinely has no resources. The\ndiscovery endpoint then cached that empty list as a valid success, pinning\noperator\n[…]\nx\ninstead of being cached; genuinely-empty accounts still return and cache an\nempty list. The interactive/CLI console paths keep the swallow and continue to\ndegrade gracefully to \"no resources found\".",
"is_bot": false,
"headline": "fix(api): stop caching swallowed AWS errors as empty discovery results",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e43d126b2d128b4d3286a25c0170589ffe53d9da",
"body": "Parametrise the request-type EC2Fleet and SpotFleet cleanup tests over\nrequested_count [1, 2]. Fleet teardown at capacity 2 exercises the\nweighted-capacity cancellation path that a single instance never triggers,\nand the count=2 variant asserts the requested target capacity up front and a\nfull teard\n[…]\nition, instant ASG teardown) so it is clear which\nscenarios must stay in the live suite rather than being mocked against\nunrealistic simulator behaviour. Cross-reference it from the AWS test conftest.",
"is_bot": false,
"headline": "test(aws): cover fleet cleanup at capacity 2 and document moto limits",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0f407cf09eccac6825b49976085952ca61623b6e",
"body": "Each CI workflow ran a serial setup-cache job (reusable cache-management\nworkflow) whose only purpose was to return a cache-key string and prime the\ndependency cache before any real work could start. That job added a ~20s\ngate to the critical path of every workflow and was the sole writer of the\ndep\n[…]\n expression directly at each consumer (or let the\nreusable test/security workflows compute it from their existing fallback) and\ndrop the indirection job and its dead build/container branches entirely.",
"is_bot": false,
"headline": "ci: self-warming dependency cache without a priming gate",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c335c0a51727258f09da52153274ffb9e49a287a",
"body": "Drive the complete authorization chain (minted JWT -> AuthMiddleware ->\nrequest.state -> get_current_user -> require_role) against an app built by\ncreate_fastapi_app with auth enabled, complementing the isolated require_role\nunit tests.\n\nCover a role/resource allow/deny matrix across all four caller\n[…]\nrization claims, assert /me\nreports the resolved role, pin the /health-public vs /info-gated boundary, and\nverify invalid or wrong-key tokens are rejected at authentication (401) before\nthe role gate.",
"is_bot": false,
"headline": "test(api): end-to-end RBAC enforcement over the full auth stack",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e159e39f25621fc9ad167571f300a4d6f956ffc8",
"body": "…tegies\n\nRoute the bearer and enhanced-bearer strategies through a single canonical\nclaim-extraction seam so roles and permissions are read identically regardless\nof which strategy validated the token.\n\nToken payloads are untrusted, so the extractor normalises both claims: a\nscalar-string claim is c\n[…]\nroles claim would be stored as\na string and make role/permission membership checks perform substring matching.\n\nDocument the canonical roles/permissions claim names and the per-strategy\nclaim sources.",
"is_bot": false,
"headline": "feat(auth): centralise authorization claim extraction across JWT stra…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7a931107e14d7210b135494a417b9814a8ff9882",
"body": "Introduce OrchestratorBase._dispatch, a shared try/log/re-raise seam for\ncommand_bus.execute and query_bus.execute calls, and route every\norchestrator's bus dispatches through it. Failures are now logged at\nerror level with an operation label before the original exception is\nre-raised unchanged, so \n[…]\n bulk status loop that\nfolds errors into partial results) catch those first and document the\ndivergence; unexpected errors on those paths are now logged and\nre-raised rather than propagating silently.",
"is_bot": false,
"headline": "refactor(application): standardise orchestrator error handling",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:13:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6cc76c9681f77d24d46f551a5a8d684365f3a5ba",
"body": "…gies\n\nThe response-formatting service is the single seam every interface routes\nwire-format translation through, but its dedicated unit tests only exercised\nit against a mock scheduler. Add coverage that wraps the service around both\nreal scheduler strategies (default and hostfactory) so every format method is\nproven against the shapes the strategies actually emit, and pin the\nintentional request_id/requestId field-name divergence at the shared seam.",
"is_bot": false,
"headline": "test(interface): cover response formatting over both scheduler strate…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:12:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8ca8c0725ecfc321ac94f9d36a894cca5519ee6f",
"body": "Add GET /providers/discover/{provider_api}/{resource_type} so the template\nform can populate VPC, subnet, and security-group dropdowns instead of asking\nusers to type IDs by hand.\n\nThe endpoint resolves the provider strategy and returns discovered resources\nas JSON via a new machine-readable list_re\n[…]\ncture topology changes rarely and each miss issues several EC2\nDescribe* calls. Discovery requires the operator role because it enumerates\naccount infrastructure that viewer-role callers must not see.",
"is_bot": false,
"headline": "feat(api): add AWS resource discovery endpoint",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:12:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "17e7160f5f21c4b93376fa33b684f91c06587e2f",
"body": "feat: CLI/SDK wait mode, config-set persistence, UI live updates, and test coverage",
"is_bot": false,
"headline": "Merge pull request #348 from finos/chore/finish-pr2-tests-cli-ui",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:12:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2200211a796d9062b29129096c1a4fef39c71c34",
"body": "refactor: security hardening and architecture-boundary cleanups",
"is_bot": false,
"headline": "Merge pull request #347 from finos/chore/finish-pr1-security-arch",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-28T08:11:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bdbcdfb3b9ba3081a612a24f9357eee70fa7c2d7",
"body": "The logger is typed as LoggingPort, so accessing .warning.assert_called_once()\nfails type checking against the real bound method. Cast to MagicMock to\ntype-check the mock assertion without changing what the test verifies.",
"is_bot": false,
"headline": "test: type mock introspection call on injected logger",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T15:09:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a2533cf052f76a1141cf6a23da985b7ae304cda",
"body": "Mock the synchronous dto factory with an explicit MagicMock instead of\nassigning mock attributes onto a bound method, silence the pydantic\nField-default call-arg inference on K8sProviderConfig, and annotate the\nReflex Var-descriptor calls the state tests exercise. Runtime behaviour and\nassertions are unchanged.",
"is_bot": false,
"headline": "test: satisfy the type checker in bulk-handler, k8s, and UI state tests",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T15:07:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f4af7fe12ff1b41357b75f7fea1a98f86d9e345e",
"body": "The request-creation and status routes now expose wait/timeout query\nparameters for blocking mode, and the config-set route exposes a persist\nparameter with updated descriptions. Regenerate the committed spec that all\nSDKs generate from so it matches the live routes.",
"is_bot": false,
"headline": "chore(sdk): regenerate OpenAPI spec for wait mode and config-set persist",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T15:02:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5109a6eb584d34db6bb208a3f3210bbf1ab4a6f3",
"body": "The OSError from the temp-file unlink during save() failure handling is\ndeliberately swallowed so the original write error is the one propagated.\nDocument why the except body is a bare pass.",
"is_bot": false,
"headline": "docs(config): explain intentional temp-file cleanup fallback",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T15:02:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "af79d5bd2ed58451beb1a8ed504a743561bbfc8a",
"body": "GetMultipleTemplatesHandler and GetMultipleMachinesHandler imported query\nservices and DTO factories that do not exist (template_query_service,\nmachine_query_service, template_dto_factory, machine_dto_factory). The imports\nwere lazy, inside __init__, so constructing either handler raised ImportError\n[…]\ne-fetch endpoints.\n\nBulk handler tests now construct the handlers through their public constructors\nso a missing collaborator surfaces as a test failure rather than being hidden\nbehind object.__new__.",
"is_bot": false,
"headline": "fix(queries): repair bulk template and machine retrieval",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T15:02:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a295e511c58be78a81b89597e2d6cd6dd67187cb",
"body": "UpdateMachineStatusHandler called machine.update_status(...) but discarded\nits return value and saved the original, unchanged machine. Machine is an\nimmutable aggregate: update_status builds and returns a new instance (carrying\nthe status change and its MachineStatusChangedEvent) rather than mutatin\n[…]\nlace, so the status update was silently lost.\n\nCapture the returned machine, persist it, and publish the domain events the\nrepository extracts on save so the status-changed event is no longer dropped.",
"is_bot": false,
"headline": "fix(machine): persist status change from immutable aggregate",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T15:02:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a2b99eac3659919f7877915a0c50cef633dfa5d2",
"body": "Resolving a per-type resource prefix through get_resource_prefix now\nreturns an empty string when the key is not configured, instead of\nfalling back to the global default_prefix. An operator who sets only a\nglobal resource.prefixes.default no longer has per-type resource names\nand tags silently rewritten, which would otherwise break prefix-keyed\ndiscovery and cleanup and orphan already-provisioned resources.\nExplicitly configured per-type prefixes are still honoured.",
"is_bot": false,
"headline": "fix(config): keep per-type resource prefixes empty when unset",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T14:41:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c50b8b55b47ec193672cd55b0bc0c5a155a17f9",
"body": "Subscribe the Requests page to the backend Server-Sent Events stream so\nrequest status transitions patch the affected row in place instead of\nwaiting for the next full poll. Status, completion, and failure events\nrewrite only the matching row's status, preserving scroll position,\nselection, and any open drawer. Reuses the existing reconnect-with-backoff\nSSE client and is single-flight guarded so a page re-mount never opens a\nsecond stream.",
"is_bot": false,
"headline": "feat(ui): live-update request list rows via SSE",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T13:45:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6233c6e7a76b0fc15affaa9254fe73feef6ef92",
"body": "Give every subcommand parser both a short help= and a long-form\ndescription= following a consistent 'imperative verb, noun, outcome'\nformat, so 'orb <resource> --help' and 'orb <resource> <action> --help'\nalways show meaningful, uniform documentation.\n\nAlso correct the getting-started help and infra\n[…]\ndefault; only --non-interactive\nexists) instead of the nonexistent --interactive flag.\n\nAdd contract tests asserting every sub-parser carries help and\ndescription text and every argument carries help.",
"is_bot": false,
"headline": "docs(cli): standardize help text across all commands",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T13:45:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "91bee3539375e9ef13b9cdd42f6046246dca9d51",
"body": "Writing a configuration value only mutated the in-memory config, so a CLI\n'config set' was lost the moment the process exited and a server restart\nreverted API/UI edits.\n\n- CLI 'orb config set' now writes the change back to the loaded config file\n by default, with '--no-persist' to opt into in-memo\n[…]\nctive-admin check and reporting the path.\n- Config file writes are atomic (temp file + fsync + rename), so a reader\n never sees a half-written file and a crash mid-write leaves the original\n intact.",
"is_bot": false,
"headline": "feat(config): persist 'config set' edits to disk",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T13:45:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "71294a84125f771c3a039093d7bb809074ff18f3",
"body": "Bring the SDK to parity with the CLI --dry-run flag: ORBClient(dry_run=True)\nand SDKConfig dry_run (dict/env/to_dict) mock provider operations by forwarding\nthe flag to Application.initialize(), so callers can preview provisioning\nwithout touching real infrastructure.",
"is_bot": false,
"headline": "feat(sdk): add dry-run override to ORBClient",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T13:05:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d207d9b91b7bae1987d01c3b889a45ad0e7c8330",
"body": "The --wait/--timeout flags were only consumed by the machines\nrequest/return commands. Extend blocking mode across the remaining\nsurfaces so callers can wait for a terminal state consistently:\n\n- orb requests status --wait polls until every request is terminal\n or the timeout elapses, reusing the s\n[…]\nue&timeout=N, capped server-side to prevent a client\n from holding a worker connection open indefinitely.\n- MCP request_machines and get_request_status tools expose the wait\n and timeout parameters.",
"is_bot": false,
"headline": "feat: extend --wait blocking mode to request status, SDK, and REST",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T13:05:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a6ce167b098c9bb17c0e6bea6e568eb0d952eaf6",
"body": "The Mock* prefix conventionally signals unittest.mock.Mock objects, but\nthese classes are hand-rolled fakes (manual implementations of ports and\ninterfaces). Rename them to the Fake* prefix so the naming reflects what\nthey are, leaving genuine unittest.mock patch targets untouched.",
"is_bot": false,
"headline": "test: rename hand-rolled Mock* test doubles to Fake*",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T13:05:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8714cba897032e5f39e4e9114385f1695891d7b",
"body": "Move the misplaced \"# type: ignore[import]\" comments onto the\n\"from\" line so pyright suppresses the intentional missing-import\nprobes, replace the deleted-module import assertions with\nimportlib.import_module string lookups so they no longer surface\nmissing- and unused-import warnings, and annotate the mock handler\nand captured-handler locals so attribute and await access type-check.",
"is_bot": false,
"headline": "test: clear residual pyright errors in test suite",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T13:05:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d226b37b45d601789195eae38069dc975f9d7c71",
"body": "…time\n\nVerify check_hosts_status status-mapping for ASG, EC2Fleet, and SpotFleet\nagainst real provisioned instances rather than return type alone, and add a\nmaintain-fleet shortfall case where running capacity drops below target.\n\nExtend the AWS contract suite to EC2Fleet and SpotFleet, asserting ex\n[…]\nse handler retry loop at runtime: transient errors are retried\nto success, immediate successes never sleep, and critical operations trip the\ncircuit breaker open once the failure threshold is reached.",
"is_bot": false,
"headline": "test(aws): cover fleet fulfilment mapping, contract parity, retry run…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T13:05:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2140246509c67448bb79c6ef9d2aae1a9a5c7195",
"body": "Add unit tests for the previously untested machine, provider, and system\ncommand handlers, the request sync handler, and the request/return-request\nand bulk query pipelines. Each handler now has happy-path, error, and\nport-interaction coverage, bringing every command and query handler module\nto at least 80% line coverage.\n\nTests inject mock ports via the constructor and assert on return values and\nport interactions; concrete classes are exercised as real objects rather\nthan mocked.",
"is_bot": false,
"headline": "test: cover untested command and query handlers",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T13:05:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2822aba228609360529843c6a524a779fa8be95c",
"body": "…l deep_merge\n\ndeep_merge_dicts in collections/transforming.py was a behavioral twin of\norb.infrastructure.utilities.common.deep_merge.deep_merge with no production\ncallers — it existed only to back its own unit tests. Remove it and its\nexport so there is a single deep dictionary-merge helper. Its test coverage\nis already provided by test_deep_merge.py.",
"is_bot": false,
"headline": "refactor(utils): drop duplicate deep_merge_dicts in favor of canonica…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T12:50:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "72b93d90823a059ad6a229e735008d8e08f1d79f",
"body": "Move hf_docs/ into docs/root/hostfactory/ so the HostFactory API reference\nlives alongside the rest of the HostFactory documentation, and update the\ndocstring/comment references in the hostfactory strategy and formatters to\npoint at the new path.\n\nRemove local_env.sh: it exported HF_PROVIDER_* variables and invoked a\nroot-level scripts/ directory that no longer exists after the provider\nlayout migration, and nothing in CI, tests, or docs references it.",
"is_bot": false,
"headline": "chore: relocate HostFactory reference docs and drop dead dev env script",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T12:50:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "590cf59a98dd5db95f34993f0513d0d9f08bf987",
"body": "Move AMI resolution cache config into the AWS provider package and drop the\nAWS-specific resource-prefix fields (launch_template, instance, fleet,\nspot_fleet, asg) from the shared ResourcePrefixConfig/PrefixConfig. Prefix\nschemas now allow extra keys so provider-supplied prefixes still resolve via\nt\n[…]\ning back to default_prefix\nwhen unset. Generic naming patterns no longer enumerate provider identifiers;\neach provider contributes its own. This keeps the core config layer free of\nprovider knowledge.",
"is_bot": false,
"headline": "refactor(config): remove AWS vocabulary from generic config schemas",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T12:50:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1cc2b64235b73be4c89247c532a608729c2de85d",
"body": "…pec deps\n\nProvider implementations no longer import from orb.application. The\nprovider-handler contract and its shared template-method base\n(ProviderHandler / BaseProviderHandler) now live in\norb.domain.base.provider_handler_base; the application-layer modules\nre-export them for backward compatibil\n[…]\nd\nunder the port during DI bootstrap, so the AWS and Kubernetes provider\nwiring resolves it via the port instead of importing the application\nservice, keeping the dependency direction pointing inward.",
"is_bot": false,
"headline": "refactor(providers): invert provider→application handler and native-s…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T12:50:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e3ed71feed0fdb68cf3a5bc8167a2779a2a1aa1c",
"body": "Several try/except blocks in the AWS provider silently discarded\nexceptions with a bare pass or a plain return None, hiding failures in\nIAM/STS role discovery, storage-strategy resolution, AMI and image cache\npersistence, token-revocation payload decoding, weighted-capacity\nparsing, fleet-type coerc\n[…]\nno trace when something genuinely went wrong. Emit a debug log with\nthe exception at every such site so degraded behaviour is diagnosable,\nwhile preserving the existing graceful-degradation semantics.",
"is_bot": false,
"headline": "fix(aws): log swallowed errors in AWS provider best-effort paths",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T12:50:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bd14aa2b5bd47207ad19e7c4c2d05f6e13baa4f2",
"body": "Security-critical auth events were only logged as free-text at INFO level,\nmaking them hard to route to a SIEM and incomplete (no dedicated records for\nfailures, expiry, revocation, or permission denials).\n\nAdd AuthAuditLogger, a structured logger on the dedicated 'orb.audit' channel\nthat emits one \n[…]\ne (constructor-injected, default-constructed) to\nrecord success, failure, expiry, and 403 authorization denials, and into the\nenhanced bearer strategy to record TOKEN_REVOKED on successful revocation.",
"is_bot": false,
"headline": "feat(api): add structured audit logging for authentication events",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T12:50:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e4c86fbfc7f5970f0659593d31260e37b6dde69a",
"body": "When require_https is enabled, wire Starlette's HTTPSRedirectMiddleware so\nplain HTTP requests receive a 307 redirect to their HTTPS equivalent, closing\nthe gap where the flag was accepted but never enforced. The Strict-Transport-\nSecurity max-age is now configurable via server.hsts_max_age (default\n[…]\nthreaded through the always-on security headers middleware. With\nrequire_https disabled the redirect middleware is not registered and no HSTS\npolicy is advertised, so HTTP-only origins are unaffected.",
"is_bot": false,
"headline": "feat(api): enforce HTTPS with redirect and configurable HSTS",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T12:50:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4f74b913597b8ce0338fc20ba1266c93f18814d9",
"body": "feat(mcp): unify MCP onto a single catalog-driven server on the official SDK",
"is_bot": false,
"headline": "Merge pull request #345 from finos/feat/mcp-unification",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T12:06:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2fa81676136a7087c0a93d75d3e2fae29c806eda",
"body": "Add unit coverage for the transport entrypoints, the serve and validate CLI\nhandlers, and the telemetry-flush helper — the stdio and Streamable HTTP\nrunners are exercised with the SDK transports and uvicorn mocked, so no port\nis bound and no real client is needed. Raises the server module from\npartial to full coverage of its behavioural paths.",
"is_bot": false,
"headline": "test(mcp): cover the server lifecycle and CLI handlers",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:41:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b2f63bbc0cba521077964c9b792ee4d495baa9b7",
"body": "chore: remove unused k8s-legacy constraints.txt",
"is_bot": false,
"headline": "Merge pull request #344 from finos/chore/drop-dead-k8s-constraints",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:26:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3c10ee7828391d3df9f5c84e488f4100cfc49115",
"body": "Registering the CLI commands imported the MCP server module unconditionally,\nso any environment without the optional mcp extra failed to build the command\nregistry at all. Skip the mcp command registration when the extra is absent —\nthe rest of the CLI loads and 'orb mcp' simply reports an unknown command — and\nadd the mcp package to the test dependency group so the server's tests run\nagainst it.",
"is_bot": false,
"headline": "fix(mcp): make the mcp extra a true optional dependency",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:18:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "20301fa97cf1a4b790dfd05ada681c7098754c78",
"body": "k8s-legacy/constraints.txt is a leftover pinned-dependency file from the\npre-consolidation vendored tree. Nothing installs from it: no CI job, build,\nDockerfile, or Makefile references it, and its pins are already governed by\nthe root project's dependency extras and lockfile. Because it is a valid\np\n[…]\n==-pinned packages, Dependabot's recursive manifest\ndiscovery kept opening update PRs against it despite it being dead. Remove\nit to stop the noise; it carries no dependency information used anywhere.",
"is_bot": false,
"headline": "chore: remove unused k8s-legacy constraints.txt",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:14:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fb4622e480903a5c09bfb21e5880e896ca7423e8",
"body": "… tidy docs\n\nAdvertise the null type for Optional tool-input fields so a client that sends\nan explicit null for an unset optional argument passes input validation instead\nof being rejected before the handler runs.\n\nRender the offline validate summary as json or yaml only; the table and list\nformats \n[…]\ny raised.\n\nUpdate the CLI reference to the current mcp commands (the tools subcommands are\ngone; serve takes a transport flag), and remove a test helper left behind when\nits only consumer was deleted.",
"is_bot": false,
"headline": "fix(mcp): accept null for optional tool args, harden validate output,…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:00:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e0512d668554ef1afc76564fafd9be2ca944edcb",
"body": "Add spec-compliance coverage for the catalog-driven server: the served tool\nset matches the catalog's MCP-exposed operations, every tool advertises a valid\nobject input schema, unknown tools and failing handlers surface as tool-error\nresults rather than protocol errors, and successful calls return t\n[…]\nto the\ncurrent commands and transport flags, and to the correct client API.\n\nThe live-AWS MCP scenario is not yet re-homed onto the new server; it needs a\nreal-account runner and is left as follow-up.",
"is_bot": false,
"headline": "test(mcp): cover the unified server and refresh MCP docs and examples",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:00:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8d4764a6db3fa74969d46bd7ae14196b198951db",
"body": "… paths\n\nWire 'orb mcp serve' to the catalog-driven server with a transport flag\n(stdio by default, Streamable HTTP opt-in via --transport with --host/--port/\n--path), and add an offline 'orb mcp validate' that checks the exposed tool\nset and its schemas without starting a server or client.\n\nRemove \n[…]\now\ncome from the same definition as the other interfaces.\n\nDrop the 'orb mcp tools' subcommands: introspecting a running server is the\njob of an MCP client or the Inspector, not a server-side command.",
"is_bot": false,
"headline": "feat(mcp): serve the catalog-driven server and retire the hand-rolled…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:00:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3f06848ab16719ba0a8b5adae7f9eb8ed1975376",
"body": "Add an MCP server whose tools are the operation-catalog entries exposed on the\nMCP interface — the tool list, input schemas, and response bodies all derive\nfrom the single catalog definition, so the surface stays consistent with the\nCLI, REST, and SDK by construction. Tool and input errors surface as tool\nresults rather than protocol errors. Provides stdio and Streamable HTTP\nentrypoints.\n\nNot yet wired into the CLI; the existing server remains in place until it is\nswitched over.",
"is_bot": false,
"headline": "feat(mcp): add a catalog-driven server on the official MCP SDK",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:00:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "08143eaede5b58a7ccd7532c760010d639152707",
"body": "…l dependency\n\nAdd an mcp extra pinned to the stable 1.x line and fold it into the all extra.\nThe upper bound holds to 1.x because the 2.0 release renames the server class\nand reshapes the handler surface, making that upgrade a deliberate migration.",
"is_bot": false,
"headline": "build(mcp): add the official Model Context Protocol SDK as an optiona…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:00:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "edbbcbedb4030587c819584e8ff04af4a0b2ba56",
"body": "…talog\n\nDeclare the provider health, listing, config, and metrics operations in the\noperation catalog, wiring their existing orchestrators and rendering their\nresponses through the shared formatter. The CLI provider handlers now render\nthrough the catalog entry rather than building their response bo\n[…]\nes. The bodies are\nunchanged.\n\nExpose the single-machine lookup on the MCP surface as well, so retrieving a\nmachine's status is available there through the same catalog entry the other\ninterfaces use.",
"is_bot": false,
"headline": "feat(interface): add provider and single-machine operations to the ca…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T11:00:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "aae185ae61dca1d9cd7a95a6501ffd5e5bb93437",
"body": "…e366620a\n\nchore(deps): bump the security-updates group across 1 directory with 12 updates",
"is_bot": false,
"headline": "Merge pull request #342 from finos/dependabot/pip/security-updates-20…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T09:54:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04d7cc696c8d73792e9d1f6fc3376f68a082f37a",
"body": "…12 updates\n\nBumps the security-updates group with 12 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [prometheus-client](https://github.com/prometheus/client_python) | `0.25.0` | `0.26.0` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.139.0` | `0.140.0` |\n| [annot\n[…]\ndependency-version: 0.19.2\n dependency-type: direct:production\n update-type: version-update:semver-patch\n dependency-group: security-updates\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "chore(deps): bump the security-updates group across 1 directory with …",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-27T09:21:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "21b20b05bea16ce47713f0810155157d12eb1bf5",
"body": "…ctions-52758779fe\n\nci(deps): bump the github-actions group with 14 updates",
"is_bot": false,
"headline": "Merge pull request #341 from finos/dependabot/github_actions/github-a…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T09:18:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e6c6d01bee25edb5c6ceb4f0c880b22da27e4d71",
"body": "chore(deps): monthly dependency maintenance",
"is_bot": false,
"headline": "Merge pull request #343 from finos/chore/monthly-dependency-maintenance",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T09:11:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "369e97ad9470ea74870174e7a2bbb80c317d385d",
"body": "…96d8d027\n\nchore(deps): bump the aws-dependencies group with 2 updates",
"is_bot": false,
"headline": "Merge pull request #340 from finos/dependabot/pip/aws-dependencies-44…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T09:09:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "960ded960cc1a9f6078baa947da11b740685bc5c",
"body": "chore: quality sweep — 404 not-found fix, security hardening, boto DRY, dead-code + test + docs cleanup",
"is_bot": false,
"headline": "Merge pull request #338 from finos/chore/finish-quality-sweep",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:50:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d615e53b30d249ef48a576494eefc14f956ccdbe",
"body": "…gelog CI\n\n- MCP tool descriptions now reflect real handler behaviour (tools/list).\n- Storage lock scope documented as in-process; SQLite cross-process file\n locking documented at the connection layer, with a new concurrent-write test.\n- New guard test: a Template field with a deprecated alias must\n[…]\n_status_reason and a\n moto SDK assertion that instances terminate after a return cycle.\n- Dropped the manual per-PR CHANGELOG step now that the changelog is\n generated automatically at release time.",
"is_bot": false,
"headline": "test+docs: MCP descriptions, storage locking, deprecation guard, chan…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:34:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d8190c94a7b6b8877655d98d2857da207aab82a8",
"body": "Removed the unused RequestHistoryEvent value object (no production callers),\ncleared ruff findings in the bootstrap package (dead noqa directives, an\nunnecessary quoted annotation, a redundant lambda), and dropped inaccurate\n'Deprecated' notes from three internal bootstrap aliases that have live\ncallers and emit no warning.",
"is_bot": false,
"headline": "chore: remove dead code, clear bootstrap lint, fix inaccurate docstrings",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:32:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6266bd836332894f5df9d2569ecb00a4282dd1eb",
"body": "An empty or wildcard trusted_hosts value silently skips TrustedHostMiddleware.\nThe server now logs a startup warning naming the security implication so an\noperator knows host-header protection is off.",
"is_bot": false,
"headline": "security: warn when trusted_hosts disables host-header protection",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:32:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cda12e15a9aced72b1d92166946983b793a5b80a",
"body": "Two concurrency tests patched a shared bus mock from worker threads;\npatch.object is not thread-safe and intermittently raised AttributeError.\nEach worker now uses its own mock.",
"is_bot": false,
"headline": "fix(test): make concurrent workflow tests thread-safe",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:32:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fd42520cbdc0a7a14f02fdd73b680a5ef000338c",
"body": "The query and command SDK-method factories mapped parameters twice — once\nin the try body and again when building error detail. The mapping is now\ncomputed once and reused.",
"is_bot": false,
"headline": "refactor(sdk): compute CQRS parameter mapping once",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:32:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d50b23e8d303bfda3ba32d145ce5a1c47d8eb8fb",
"body": "Four AWS clients built their own botocore Config with duplicated timeout\nand retry settings. They now use the shared get_boto3_config() helper (one\nsource of truth); per-site values are preserved, including aws_client's\nconfig-driven timeouts and region, and retry mode aligns with the rest of\nthe codebase.",
"is_bot": false,
"headline": "refactor(aws): route inline botocore Config through the shared factory",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:32:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fbb7abd7bf3912272491e7198d7f40a7b78c0012",
"body": "Removed the hardcoded 'aws' fallbacks in the app schema and provider config\nmanager. The explicit configured provider still wins; when none is\nconfigured the schema raises ConfigurationError (pointing at 'orb init')\nrather than defaulting to a provider, keeping the config layer\nprovider-agnostic and free of a provider-registry import.",
"is_bot": false,
"headline": "fix(config): resolve provider type without assuming AWS",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:32:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0d126233c2216bbe1233e20e359e292f81d6b1d",
"body": "… GETs\n\nGET /requests/{id} and /requests/{id}/status returned HTTP 200 with an\nempty-but-valid body when the request did not exist. The shared status\norchestrator collapsed every per-ID exception into one {request_id, error}\nshape, so the router could not tell 'not found' from 'exists but sync\nerror\n[…]\nailures), and the single-ID\nendpoints raise EntityNotFoundError -> 404 only on that flag. A real request\nthat failed provisioning (status set, populated error block) still returns\n200 with its detail.",
"is_bot": false,
"headline": "fix(api): return 404 only for genuinely-missing requests on single-ID…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:32:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "61776cc9424408d17e89926f6251818c5a894432",
"body": "feat(interface): route all interfaces through a shared operation catalog",
"is_bot": false,
"headline": "Merge pull request #339 from finos/feat/interface-consistency",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T08:30:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27964a5c56a9b35b03308880580c61244207effc",
"body": null,
"is_bot": false,
"headline": "chore(deps): monthly dependency maintenance",
"author_name": "fgogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-27T07:09:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "911bdb6e7c705c13fb2b331e95a60f5436f3f1bd",
"body": "…paths\n\nExpose a machine-health query returning a machine's overall, system, and\ninstance health. By default it reports the health last recorded during status\nsync; with a refresh flag it queries the provider for a current reading through\nthe provider registry and falls back to the stored snapshot i\n[…]\nnot available rather than a\nfabricated healthy state.\n\nUpdate the SDK reference so the cleanup methods are documented as their current\nservice-backed behaviour rather than the removed command classes.",
"is_bot": false,
"headline": "feat(machine): add machine health query with stored and live-refresh …",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-26T10:46:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e57d37bdfe0074a987f4271360e32c77afa29a66",
"body": "The handler for cleaning up an explicit set of machines previously only marked\nthem terminated in storage, leaving the underlying provider resources running\nand ignoring the force flag. It now dispatches a cleanup operation to each\nmachine's provider through the provider registry and marks a machine\n[…]\ntance's resources.\n\nRemove the register and deregister machine handlers and their commands: they\nreferenced a constructor that does not exist and duplicated the return flow,\nand were never dispatched.",
"is_bot": false,
"headline": "feat(machine): perform real provider teardown on resource cleanup",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-26T10:46:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "53aaaa4d7b459fa2bfff2a5bc16cb0054cccd2a9",
"body": null,
"is_bot": true,
"headline": "chore(deps): update uv.lock after dependabot changes",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-26T10:11:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d374b41cd94cd441b19fb69998567d8323f5b2d",
"body": "Bumps the github-actions group with 14 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [actions/checkout](https://github.com/actions/checkout) | `7.0.0` | `7.0.1` |\n| [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | `8.3.2` | `9.0.0` |\n| [actions/setup-python](https://github.com\n[…]\n dependency-version: 3.96.0\n dependency-type: direct:production\n update-type: version-update:semver-minor\n dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "ci(deps): bump the github-actions group with 14 updates",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-26T10:10:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f619aefc8c80f7c822982a26215129618c0df34c",
"body": null,
"is_bot": true,
"headline": "chore(deps): update uv.lock after dependabot changes",
"author_name": "github-actions[bot]",
"author_login": "github-actions[bot]",
"committed_at": "2026-07-26T10:04:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "abc7cc6df38b6cc4f796424cbe248574233a45c8",
"body": "Bumps the aws-dependencies group with 2 updates: [boto3](https://github.com/boto/boto3) and [botocore](https://github.com/boto/botocore).\n\n\nUpdates `boto3` from 1.43.51 to 1.43.56\n- [Release notes](https://github.com/boto/boto3/releases)\n- [Commits](https://github.com/boto/boto3/compare/1.43.51...1.\n[…]\nependency-version: 1.43.56\n dependency-type: direct:production\n update-type: version-update:semver-patch\n dependency-group: aws-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "chore(deps): bump the aws-dependencies group with 2 updates",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-07-26T10:03:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d30a4e761e44366ffc7055a10ab53f1dc2d01e2b",
"body": "Implement the request-summary, active-machine-count, and request-metrics SDK\nmethods, previously placeholders, by dispatching their queries through the\nquery bus. Route the request-cleanup and full-resource-cleanup methods at the\nexisting admin cleanup service, which finds retention-eligible records\n[…]\nsource listings: they dispatched to repository methods\nthat were never implemented and were unreachable in production. Drop the SDK\nplaceholders and protocol declarations left with no backing handler.",
"is_bot": false,
"headline": "feat(sdk): complete query methods and route cleanup to the admin service",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-26T07:37:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cfa2ee2b905e9cba40b57bbfcd73dd8bfd3f7f7b",
"body": "Add a contract test that drives each catalogued operation's output through\nevery interface it is exposed on and asserts the rendered body is identical,\nexcept where an entry declares an explicit per-interface renderer. Guards that\nevery multi-interface operation has coverage.",
"is_bot": false,
"headline": "test(interface): assert body consistency across interfaces",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-26T07:37:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "327a796dd27354a422c2e658a31d653057b5b133",
"body": "Declare each domain operation once in an operation catalog: its orchestrator,\ninput and output DTOs, and the response-formatter call that renders its body.\nThe CLI and REST adapters look up the catalog entry and render through the\nshared response formatter instead of each restating the orchestrator \n[…]\n same total_count and next_cursor fields across interfaces.\n\nAdd a single-template detail method to the response formatter so template\nretrieval renders through the same path as every other operation.",
"is_bot": false,
"headline": "feat(interface): route interfaces through a shared operation catalog",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-26T07:37:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cb85b1ee3b95873bdfbbdfa950b55e8b1ad834da",
"body": "refactor: AWS auth config DRY, deprecation signals, resilience dependency inversion, CLI provider-type guard",
"is_bot": false,
"headline": "Merge pull request #336 from finos/chore/close-dangling-quality",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-24T15:01:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d4f7b1939c9f8d45502dc30c02f19120f1c36bb",
"body": "…lict\n\nAdd a regression test asserting --provider-type is declared exactly once per\nleaf sub-parser (inherited from the shared parent parser) and that registering\nan additional provider spec widens its choices rather than adding a second\nconflicting option string.",
"is_bot": false,
"headline": "test(cli): guard --provider-type against multi-provider argparse conf…",
"author_name": "Flamur Gogolli",
"author_login": "fgogolli",
"committed_at": "2026-07-24T13:18:43Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 28,
"commits_last_year": 3256,
"latest_release_at": "2026-07-24T11:52:12Z",
"latest_release_tag": "v1.8.5",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 49,
"days_since_latest_release": 4,
"mean_days_between_releases": 6.3
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 87,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "github.com/finos/open-resource-broker",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/finos/open-resource-broker",
"is_deprecated": false,
"latest_version": "v1.8.5",
"repository_url": "https://github.com/finos/open-resource-broker",
"versions_count": 27,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-24T11:52:09Z",
"latest_version_yanked": null,
"days_since_latest_publish": 4
},
{
"name": "orb-py",
"exists": true,
"license": "Apache-2.0",
"keywords": [
"aws",
"ec2",
"hostfactory",
"symphony",
"hpc",
"cluster",
"cloud",
"infrastructure",
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: System :: Clustering",
"Topic :: System :: Distributed Computing"
],
"ecosystem": "pypi",
"matches_repo": true,
"registry_url": "https://pypi.org/project/orb-py/",
"is_deprecated": false,
"latest_version": "1.8.5",
"repository_url": "https://github.com/finos/open-resource-broker",
"versions_count": 20,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 13502,
"first_published_at": "2026-01-21T12:31:31.704775Z",
"latest_published_at": "2026-07-24T11:59:21.359729Z",
"latest_version_yanked": null,
"days_since_latest_publish": 4
}
]
},
"popularity": {
"forks": 10,
"stars": 18,
"watchers": 2,
"fork_history": {
"days": [
{
"date": "2026-03-03",
"count": 1
},
{
"date": "2026-03-17",
"count": 1
},
{
"date": "2026-04-16",
"count": 1
},
{
"date": "2026-05-26",
"count": 1
},
{
"date": "2026-06-05",
"count": 1
},
{
"date": "2026-06-08",
"count": 1
},
{
"date": "2026-06-10",
"count": 2
},
{
"date": "2026-06-15",
"count": 1
},
{
"date": "2026-07-03",
"count": 1
}
],
"complete": true,
"collected": 10,
"total_forks": 10
},
"star_history": null,
"open_issues_and_prs": 10
},
"ai_readiness": {
"has_nix": true,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": true,
"bootstrap_files": [
"Makefile",
"sdk/go/Makefile"
],
"api_schema_files": [
"sdk/spec/openapi.json"
],
"has_devcontainer": false,
"typecheck_configs": [
"sdk/typescript/tsconfig.json",
"src/orb/api/documentation/py.typed",
"src/orb/api/middleware/py.typed",
"src/orb/api/models/py.typed",
"src/orb/api/py.typed",
"src/orb/api/routers/py.typed",
"src/orb/application/base/py.typed",
"src/orb/application/commands/py.typed",
"src/orb/application/dto/py.typed",
"src/orb/application/events/base/py.typed",
"src/orb/application/events/bus/py.typed",
"src/orb/application/events/handlers/py.typed",
"src/orb/application/events/py.typed",
"src/orb/application/interfaces/py.typed",
"src/orb/application/machine/py.typed",
"src/orb/application/provider/py.typed",
"src/orb/application/py.typed",
"src/orb/application/queries/py.typed",
"src/orb/application/request/py.typed",
"src/orb/application/template/py.typed",
"src/orb/cli/py.typed",
"src/orb/config/managers/py.typed",
"src/orb/config/py.typed",
"src/orb/config/schemas/py.typed",
"src/orb/config/utils/py.typed",
"src/orb/config/validators/py.typed",
"src/orb/domain/base/events/py.typed",
"src/orb/domain/base/ports/py.typed",
"src/orb/domain/base/py.typed",
"src/orb/domain/machine/py.typed",
"src/orb/domain/py.typed",
"src/orb/domain/request/py.typed",
"src/orb/domain/template/py.typed",
"src/orb/infrastructure/adapters/factories/py.typed",
"src/orb/infrastructure/adapters/ports/auth/py.typed",
"src/orb/infrastructure/adapters/ports/py.typed",
"src/orb/infrastructure/adapters/py.typed",
"src/orb/infrastructure/auth/py.typed",
"src/orb/infrastructure/auth/strategy/py.typed",
"src/orb/infrastructure/caching/py.typed",
"src/orb/infrastructure/di/components/py.typed",
"src/orb/infrastructure/di/py.typed",
"src/orb/infrastructure/error/py.typed",
"src/orb/infrastructure/events/py.typed",
"src/orb/infrastructure/handlers/base/py.typed",
"src/orb/infrastructure/handlers/py.typed",
"src/orb/infrastructure/interfaces/py.typed",
"src/orb/infrastructure/logging/py.typed",
"src/orb/infrastructure/mocking/py.typed",
"src/orb/infrastructure/patterns/py.typed",
"src/orb/infrastructure/py.typed",
"src/orb/infrastructure/registry/py.typed",
"src/orb/infrastructure/resilience/py.typed",
"src/orb/infrastructure/resilience/strategy/py.typed",
"src/orb/infrastructure/scheduler/base/py.typed",
"src/orb/infrastructure/scheduler/default/py.typed",
"src/orb/infrastructure/scheduler/hostfactory/py.typed",
"src/orb/infrastructure/scheduler/py.typed",
"src/orb/infrastructure/serialization/py.typed",
"src/orb/infrastructure/storage/base/py.typed",
"src/orb/infrastructure/storage/components/py.typed",
"src/orb/infrastructure/storage/json/py.typed",
"src/orb/infrastructure/storage/py.typed",
"src/orb/infrastructure/storage/repositories/py.typed",
"src/orb/infrastructure/storage/sql/py.typed",
"src/orb/infrastructure/template/py.typed",
"src/orb/infrastructure/utilities/common/collections/py.typed",
"src/orb/infrastructure/utilities/common/py.typed",
"src/orb/infrastructure/utilities/factories/py.typed",
"src/orb/infrastructure/utilities/file/py.typed",
"src/orb/infrastructure/utilities/py.typed",
"src/orb/interface/py.typed",
"src/orb/monitoring/py.typed",
"src/orb/providers/aws/application/events/py.typed",
"src/orb/providers/aws/application/machine/py.typed",
"src/orb/providers/aws/application/py.typed",
"src/orb/providers/aws/application/request/py.typed",
"src/orb/providers/aws/application/template/py.typed",
"src/orb/providers/aws/auth/py.typed",
"src/orb/providers/aws/configuration/py.typed",
"src/orb/providers/aws/domain/machine/py.typed",
"src/orb/providers/aws/domain/py.typed",
"src/orb/providers/aws/domain/request/py.typed",
"src/orb/providers/aws/domain/template/py.typed",
"src/orb/providers/aws/exceptions/py.typed",
"src/orb/providers/aws/infrastructure/adapters/py.typed",
"src/orb/providers/aws/infrastructure/handlers/components/py.typed",
"src/orb/providers/aws/infrastructure/handlers/py.typed",
"src/orb/providers/aws/infrastructure/launch_template/py.typed",
"src/orb/providers/aws/infrastructure/py.typed",
"src/orb/providers/aws/infrastructure/template/py.typed",
"src/orb/providers/aws/persistence/py.typed",
"src/orb/providers/aws/py.typed",
"src/orb/providers/aws/resilience/py.typed",
"src/orb/providers/aws/storage/components/py.typed",
"src/orb/providers/aws/storage/py.typed",
"src/orb/providers/aws/strategy/py.typed",
"src/orb/providers/aws/utilities/ec2/py.typed",
"src/orb/providers/aws/utilities/py.typed",
"src/orb/providers/base/py.typed",
"src/orb/providers/base/strategy/load_balancing/py.typed",
"src/orb/providers/base/strategy/py.typed",
"src/orb/providers/k8s/adapters/py.typed",
"src/orb/providers/k8s/auth/py.typed",
"src/orb/providers/k8s/cli/py.typed",
"src/orb/providers/k8s/config/py.typed",
"src/orb/providers/k8s/configuration/py.typed",
"src/orb/providers/k8s/domain/py.typed",
"src/orb/providers/k8s/domain/template/py.typed",
"src/orb/providers/k8s/exceptions/py.typed",
"src/orb/providers/k8s/infrastructure/adapters/py.typed",
"src/orb/providers/k8s/infrastructure/handlers/py.typed",
"src/orb/providers/k8s/infrastructure/handlers/shared/py.typed",
"src/orb/providers/k8s/infrastructure/instrumentation/py.typed",
"src/orb/providers/k8s/infrastructure/py.typed",
"src/orb/providers/k8s/infrastructure/services/py.typed",
"src/orb/providers/k8s/py.typed",
"src/orb/providers/k8s/reconciliation/py.typed",
"src/orb/providers/k8s/resilience/py.typed",
"src/orb/providers/k8s/scheduler/py.typed",
"src/orb/providers/k8s/services/py.typed",
"src/orb/providers/k8s/strategy/py.typed",
"src/orb/providers/k8s/utilities/py.typed",
"src/orb/providers/k8s/validation/py.typed",
"src/orb/providers/k8s/watch/py.typed",
"src/orb/providers/py.typed",
"src/orb/sdk/py.typed",
"src/py.typed"
],
"toolchain_manifests": [
"go.mod",
"sdk/csharp/src/FINOS.OpenResourceBroker/FINOS.OpenResourceBroker.csproj",
"sdk/csharp/tests/contract/ContractTests.csproj",
"sdk/csharp/tests/parity/ParityTests.csproj",
"sdk/csharp/tests/unit/UnitTests.csproj",
"sdk/go/go.mod",
"sdk/java/build.gradle",
"sdk/kotlin/build.gradle.kts"
],
"largest_source_bytes": 110768,
"source_files_sampled": 2139,
"oversized_source_files": 9,
"agent_instruction_files": [
"k8s-legacy/AGENTS.md"
],
"agent_instruction_max_bytes": 1328
},
"dependencies": {
"manifests": [
"go.mod",
"pyproject.toml",
"setup.py"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 32,
"malicious_count": 0,
"assessed_package": "pypi:orb-py@1.8.5",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go",
"pypi"
],
"dependencies": [
{
"name": "pydantic",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.0.0"
},
{
"name": "pydantic-settings",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.0.0"
},
{
"name": "sqlalchemy",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.0.0"
},
{
"name": "urllib3",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.6.3"
},
{
"name": "PyJWT",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.8.0"
},
{
"name": "cryptography",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=46.0.5"
},
{
"name": "filelock",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=3.20.1"
},
{
"name": "requests",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.31.0"
},
{
"name": "PyYAML",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=6.0.0"
},
{
"name": "jsonschema",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=4.17.0"
},
{
"name": "boto3",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=1.42.21"
},
{
"name": "botocore",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=1.42.21"
},
{
"name": "psutil",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=5.9.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "boto3",
"direct": true,
"version": "1.43.56",
"ecosystem": "pypi"
},
{
"name": "botocore",
"direct": true,
"version": "1.43.56",
"ecosystem": "pypi"
},
{
"name": "cryptography",
"direct": true,
"version": "49.0.0",
"ecosystem": "pypi"
},
{
"name": "filelock",
"direct": true,
"version": "3.32.0",
"ecosystem": "pypi"
},
{
"name": "jsonschema",
"direct": true,
"version": "4.26.0",
"ecosystem": "pypi"
},
{
"name": "psutil",
"direct": true,
"version": "7.2.2",
"ecosystem": "pypi"
},
{
"name": "pydantic",
"direct": true,
"version": "2.13.4",
"ecosystem": "pypi"
},
{
"name": "pydantic-settings",
"direct": true,
"version": "2.14.2",
"ecosystem": "pypi"
},
{
"name": "pyjwt",
"direct": true,
"version": "2.13.0",
"ecosystem": "pypi"
},
{
"name": "pyyaml",
"direct": true,
"version": "6.0.3",
"ecosystem": "pypi"
},
{
"name": "requests",
"direct": true,
"version": "2.34.2",
"ecosystem": "pypi"
},
{
"name": "sqlalchemy",
"direct": true,
"version": "2.0.51",
"ecosystem": "pypi"
},
{
"name": "urllib3",
"direct": true,
"version": "2.7.0",
"ecosystem": "pypi"
},
{
"name": "@aws-crypto/sha256-js",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "@aws-crypto/util",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/core",
"direct": false,
"version": "3.975.3",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-provider-cognito-identity",
"direct": false,
"version": "3.972.58",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-provider-env",
"direct": false,
"version": "3.972.59",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-provider-http",
"direct": false,
"version": "3.972.61",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-provider-ini",
"direct": false,
"version": "3.973.4",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-provider-login",
"direct": false,
"version": "3.972.66",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-provider-node",
"direct": false,
"version": "3.972.70",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-provider-process",
"direct": false,
"version": "3.972.59",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-provider-sso",
"direct": false,
"version": "3.973.3",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-provider-web-identity",
"direct": false,
"version": "3.972.65",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/credential-providers",
"direct": false,
"version": "3.1089.0",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/nested-clients",
"direct": false,
"version": "3.997.33",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/signature-v4-multi-region",
"direct": false,
"version": "3.996.41",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/token-providers",
"direct": false,
"version": "3.1088.0",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/types",
"direct": false,
"version": "3.974.2",
"ecosystem": "npm"
},
{
"name": "@aws-sdk/xml-builder",
"direct": false,
"version": "3.972.36",
"ecosystem": "npm"
},
{
"name": "@aws/lambda-invoke-store",
"direct": false,
"version": "0.3.0",
"ecosystem": "npm"
},
{
"name": "@babel/code-frame",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/compat-data",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/core",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/generator",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-compilation-targets",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-globals",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-imports",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-transforms",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-plugin-utils",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-string-parser",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-identifier",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-option",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/helpers",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/parser",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-async-generators",
"direct": false,
"version": "7.8.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-bigint",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-class-properties",
"direct": false,
"version": "7.12.13",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-class-static-block",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-import-attributes",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-import-meta",
"direct": false,
"version": "7.10.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-json-strings",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-jsx",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-logical-assignment-operators",
"direct": false,
"version": "7.10.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-nullish-coalescing-operator",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-numeric-separator",
"direct": false,
"version": "7.10.4",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-object-rest-spread",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-optional-catch-binding",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-optional-chaining",
"direct": false,
"version": "7.8.3",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-private-property-in-object",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-top-level-await",
"direct": false,
"version": "7.14.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-typescript",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/template",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/traverse",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@babel/types",
"direct": false,
"version": "7.29.7",
"ecosystem": "npm"
},
{
"name": "@bcoe/v8-coverage",
"direct": false,
"version": "0.2.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/openharmony-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/load-nyc-config",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/schema",
"direct": false,
"version": "0.1.6",
"ecosystem": "npm"
},
{
"name": "@jest/console",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/core",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/environment",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/expect",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/expect-utils",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/fake-timers",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/globals",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/reporters",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/schemas",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "@jest/source-map",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "@jest/test-result",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/test-sequencer",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/transform",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "@jest/types",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "@jridgewell/gen-mapping",
"direct": false,
"version": "0.3.13",
"ecosystem": "npm"
},
{
"name": "@jridgewell/remapping",
"direct": false,
"version": "2.3.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.5.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.31",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm-eabi",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-arm64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-x64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-arm64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-x64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-gnueabihf",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-musleabihf",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-s390x-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-musl",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openbsd-x64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openharmony-arm64",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-arm64-msvc",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-ia32-msvc",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-gnu",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-msvc",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "@sinclair/typebox",
"direct": false,
"version": "0.27.12",
"ecosystem": "npm"
},
{
"name": "@sinonjs/commons",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "@sinonjs/fake-timers",
"direct": false,
"version": "10.3.0",
"ecosystem": "npm"
},
{
"name": "@smithy/core",
"direct": false,
"version": "3.29.5",
"ecosystem": "npm"
},
{
"name": "@smithy/credential-provider-imds",
"direct": false,
"version": "4.4.10",
"ecosystem": "npm"
},
{
"name": "@smithy/fetch-http-handler",
"direct": false,
"version": "5.6.7",
"ecosystem": "npm"
},
{
"name": "@smithy/is-array-buffer",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "@smithy/node-http-handler",
"direct": false,
"version": "4.9.7",
"ecosystem": "npm"
},
{
"name": "@smithy/protocol-http",
"direct": false,
"version": "5.5.10",
"ecosystem": "npm"
},
{
"name": "@smithy/signature-v4",
"direct": false,
"version": "5.6.6",
"ecosystem": "npm"
},
{
"name": "@smithy/types",
"direct": false,
"version": "4.16.1",
"ecosystem": "npm"
},
{
"name": "@smithy/util-buffer-from",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "@smithy/util-utf8",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "@types/babel__core",
"direct": false,
"version": "7.20.5",
"ecosystem": "npm"
},
{
"name": "@types/babel__generator",
"direct": false,
"version": "7.27.0",
"ecosystem": "npm"
},
{
"name": "@types/babel__template",
"direct": false,
"version": "7.4.4",
"ecosystem": "npm"
},
{
"name": "@types/babel__traverse",
"direct": false,
"version": "7.28.0",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "@types/graceful-fs",
"direct": false,
"version": "4.1.9",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-lib-coverage",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-lib-report",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-reports",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "@types/jest",
"direct": false,
"version": "29.5.14",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "20.19.43",
"ecosystem": "npm"
},
{
"name": "@types/stack-utils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "@types/yargs",
"direct": false,
"version": "17.0.35",
"ecosystem": "npm"
},
{
"name": "@types/yargs-parser",
"direct": false,
"version": "21.0.3",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.17.0",
"ecosystem": "npm"
},
{
"name": "agent-base",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "ansi-escapes",
"direct": false,
"version": "4.3.2",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "any-promise",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "anymatch",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "1.0.10",
"ecosystem": "npm"
},
{
"name": "asynckit",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "axios",
"direct": false,
"version": "1.18.1",
"ecosystem": "npm"
},
{
"name": "babel-jest",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "babel-plugin-istanbul",
"direct": false,
"version": "6.1.1",
"ecosystem": "npm"
},
{
"name": "babel-plugin-jest-hoist",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "babel-preset-current-node-syntax",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "babel-preset-jest",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "baseline-browser-mapping",
"direct": false,
"version": "2.10.43",
"ecosystem": "npm"
},
{
"name": "bowser",
"direct": false,
"version": "2.14.1",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.16",
"ecosystem": "npm"
},
{
"name": "braces",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "browserslist",
"direct": false,
"version": "4.28.6",
"ecosystem": "npm"
},
{
"name": "bs-logger",
"direct": false,
"version": "0.2.6",
"ecosystem": "npm"
},
{
"name": "bser",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "buffer-from",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "bundle-require",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "cac",
"direct": false,
"version": "6.7.14",
"ecosystem": "npm"
},
{
"name": "call-bind-apply-helpers",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "callsites",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "camelcase",
"direct": false,
"version": "5.3.1",
"ecosystem": "npm"
},
{
"name": "camelcase",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "caniuse-lite",
"direct": false,
"version": "1.0.30001806",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "char-regex",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "chokidar",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "ci-info",
"direct": false,
"version": "3.9.0",
"ecosystem": "npm"
},
{
"name": "cjs-module-lexer",
"direct": false,
"version": "1.4.3",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "co",
"direct": false,
"version": "4.6.0",
"ecosystem": "npm"
},
{
"name": "collect-v8-coverage",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "combined-stream",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "concat-map",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "confbox",
"direct": false,
"version": "0.1.8",
"ecosystem": "npm"
},
{
"name": "consola",
"direct": false,
"version": "3.4.2",
"ecosystem": "npm"
},
{
"name": "convert-source-map",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "create-jest",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "dedent",
"direct": false,
"version": "1.7.2",
"ecosystem": "npm"
},
{
"name": "deepmerge",
"direct": false,
"version": "4.3.1",
"ecosystem": "npm"
},
{
"name": "delayed-stream",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "detect-newline",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "diff-sequences",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "electron-to-chromium",
"direct": false,
"version": "1.5.393",
"ecosystem": "npm"
},
{
"name": "emittery",
"direct": false,
"version": "0.13.1",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "error-ex",
"direct": false,
"version": "1.3.4",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "es-set-tostringtag",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "esprima",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "execa",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "exit",
"direct": false,
"version": "0.1.2",
"ecosystem": "npm"
},
{
"name": "expect",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "fast-json-stable-stringify",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "fb-watchman",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "fill-range",
"direct": false,
"version": "7.1.1",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "fix-dts-default-cjs-exports",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "follow-redirects",
"direct": false,
"version": "1.16.0",
"ecosystem": "npm"
},
{
"name": "form-data",
"direct": false,
"version": "4.0.6",
"ecosystem": "npm"
},
{
"name": "fs.realpath",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "gensync",
"direct": false,
"version": "1.0.0-beta.2",
"ecosystem": "npm"
},
{
"name": "get-caller-file",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-package-type",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-stream",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "7.2.3",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "graceful-fs",
"direct": false,
"version": "4.2.11",
"ecosystem": "npm"
},
{
"name": "handlebars",
"direct": false,
"version": "4.7.9",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "has-tostringtag",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "html-escaper",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "https-proxy-agent",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "human-signals",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "import-local",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "imurmurhash",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "inflight",
"direct": false,
"version": "1.0.6",
"ecosystem": "npm"
},
{
"name": "inherits",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "is-arrayish",
"direct": false,
"version": "0.2.1",
"ecosystem": "npm"
},
{
"name": "is-core-module",
"direct": false,
"version": "2.16.2",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-generator-fn",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-number",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "is-stream",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-coverage",
"direct": false,
"version": "3.2.2",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-instrument",
"direct": false,
"version": "5.2.1",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-instrument",
"direct": false,
"version": "6.0.3",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-report",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-source-maps",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "istanbul-reports",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "jest",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-changed-files",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-circus",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-cli",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-config",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-diff",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-docblock",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-each",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-environment-node",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-get-type",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "jest-haste-map",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-leak-detector",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-matcher-utils",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-message-util",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-mock",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-pnp-resolver",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "jest-regex-util",
"direct": false,
"version": "29.6.3",
"ecosystem": "npm"
},
{
"name": "jest-resolve",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-resolve-dependencies",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-runner",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-runtime",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-snapshot",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-util",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-validate",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-watcher",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "jest-worker",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "joycon",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "3.15.0",
"ecosystem": "npm"
},
{
"name": "jsesc",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "json-parse-even-better-errors",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "json5",
"direct": false,
"version": "2.2.3",
"ecosystem": "npm"
},
{
"name": "kleur",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "leven",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "lilconfig",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "lines-and-columns",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "load-tsconfig",
"direct": false,
"version": "0.2.5",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "lodash.memoize",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "magic-string",
"direct": false,
"version": "0.30.21",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "make-error",
"direct": false,
"version": "1.3.6",
"ecosystem": "npm"
},
{
"name": "makeerror",
"direct": false,
"version": "1.0.12",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "merge-stream",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "micromatch",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.52.0",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "2.1.35",
"ecosystem": "npm"
},
{
"name": "mimic-fn",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "3.1.5",
"ecosystem": "npm"
},
{
"name": "minimist",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "mlly",
"direct": false,
"version": "1.8.2",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "mz",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "natural-compare",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "neo-async",
"direct": false,
"version": "2.6.2",
"ecosystem": "npm"
},
{
"name": "node-int64",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "node-releases",
"direct": false,
"version": "2.0.51",
"ecosystem": "npm"
},
{
"name": "normalize-path",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "npm-run-path",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "once",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "onetime",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "p-try",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "parse-json",
"direct": false,
"version": "5.2.0",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-is-absolute",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-parse",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "pathe",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "2.3.2",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.5",
"ecosystem": "npm"
},
{
"name": "pirates",
"direct": false,
"version": "4.0.7",
"ecosystem": "npm"
},
{
"name": "pkg-dir",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "pkg-types",
"direct": false,
"version": "1.3.1",
"ecosystem": "npm"
},
{
"name": "postcss-load-config",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "pretty-format",
"direct": false,
"version": "29.7.0",
"ecosystem": "npm"
},
{
"name": "prompts",
"direct": false,
"version": "2.4.2",
"ecosystem": "npm"
},
{
"name": "proxy-from-env",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "pure-rand",
"direct": false,
"version": "6.1.0",
"ecosystem": "npm"
},
{
"name": "react-is",
"direct": false,
"version": "18.3.1",
"ecosystem": "npm"
},
{
"name": "readdirp",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "require-directory",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "resolve",
"direct": false,
"version": "1.22.12",
"ecosystem": "npm"
},
{
"name": "resolve-cwd",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "resolve.exports",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "rollup",
"direct": false,
"version": "4.62.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "6.3.1",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.8.5",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "3.0.7",
"ecosystem": "npm"
},
{
"name": "sisteransi",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "slash",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.6.1",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.7.6",
"ecosystem": "npm"
},
{
"name": "source-map-support",
"direct": false,
"version": "0.5.13",
"ecosystem": "npm"
},
{
"name": "sprintf-js",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "stack-utils",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "string-length",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "strip-bom",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "strip-final-newline",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "strip-json-comments",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "sucrase",
"direct": false,
"version": "3.35.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "8.1.1",
"ecosystem": "npm"
},
{
"name": "supports-preserve-symlinks-flag",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "test-exclude",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "thenify",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "thenify-all",
"direct": false,
"version": "1.6.0",
"ecosystem": "npm"
},
{
"name": "tinyexec",
"direct": false,
"version": "0.3.2",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.17",
"ecosystem": "npm"
},
{
"name": "tmpl",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "to-regex-range",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "tree-kill",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "ts-interface-checker",
"direct": false,
"version": "0.1.13",
"ecosystem": "npm"
},
{
"name": "ts-jest",
"direct": false,
"version": "29.4.11",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.8.1",
"ecosystem": "npm"
},
{
"name": "tsup",
"direct": false,
"version": "8.5.1",
"ecosystem": "npm"
},
{
"name": "type-detect",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "0.21.3",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "4.41.0",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.9.3",
"ecosystem": "npm"
},
{
"name": "ufo",
"direct": false,
"version": "1.6.4",
"ecosystem": "npm"
},
{
"name": "uglify-js",
"direct": false,
"version": "3.19.3",
"ecosystem": "npm"
},
{
"name": "undici",
"direct": false,
"version": "6.27.0",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "6.21.0",
"ecosystem": "npm"
},
{
"name": "update-browserslist-db",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "v8-to-istanbul",
"direct": false,
"version": "9.3.0",
"ecosystem": "npm"
},
{
"name": "walker",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "wordwrap",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "write-file-atomic",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "y18n",
"direct": false,
"version": "5.0.8",
"ecosystem": "npm"
},
{
"name": "yallist",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "17.7.3",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "21.1.1",
"ecosystem": "npm"
},
{
"name": "yocto-queue",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "AWSSDK.Core",
"direct": false,
"version": "3.7.400.47",
"ecosystem": "nuget"
},
{
"name": "Microsoft.NET.Test.Sdk",
"direct": false,
"version": "17.10.0",
"ecosystem": "nuget"
},
{
"name": "System.Text.Json",
"direct": false,
"version": "8.0.5",
"ecosystem": "nuget"
},
{
"name": "xunit",
"direct": false,
"version": "2.8.1",
"ecosystem": "nuget"
},
{
"name": "xunit.runner.visualstudio",
"direct": false,
"version": "2.8.1",
"ecosystem": "nuget"
},
{
"name": "aiohappyeyeballs",
"direct": false,
"version": "2.7.1",
"ecosystem": "pypi"
},
{
"name": "aiohttp",
"direct": false,
"version": "3.14.3",
"ecosystem": "pypi"
},
{
"name": "aiosignal",
"direct": false,
"version": "1.4.0",
"ecosystem": "pypi"
},
{
"name": "alembic",
"direct": false,
"version": "1.18.5",
"ecosystem": "pypi"
},
{
"name": "annotated-doc",
"direct": false,
"version": "0.0.4",
"ecosystem": "pypi"
},
{
"name": "annotated-types",
"direct": false,
"version": "0.8.0",
"ecosystem": "pypi"
},
{
"name": "antlr4-python3-runtime",
"direct": false,
"version": "4.13.2",
"ecosystem": "pypi"
},
{
"name": "anyio",
"direct": false,
"version": "4.14.2",
"ecosystem": "pypi"
},
{
"name": "asgiref",
"direct": false,
"version": "3.12.1",
"ecosystem": "pypi"
},
{
"name": "asn1crypto",
"direct": false,
"version": "1.5.1",
"ecosystem": "pypi"
},
{
"name": "asttokens",
"direct": false,
"version": "3.0.2",
"ecosystem": "pypi"
},
{
"name": "async-timeout",
"direct": false,
"version": "5.0.1",
"ecosystem": "pypi"
},
{
"name": "attrs",
"direct": false,
"version": "26.1.0",
"ecosystem": "pypi"
},
{
"name": "authlib",
"direct": false,
"version": "1.7.2",
"ecosystem": "pypi"
},
{
"name": "aws-sam-translator",
"direct": false,
"version": "1.111.0",
"ecosystem": "pypi"
},
{
"name": "aws-xray-sdk",
"direct": false,
"version": "2.15.0",
"ecosystem": "pypi"
},
{
"name": "babel",
"direct": false,
"version": "2.18.0",
"ecosystem": "pypi"
},
{
"name": "backports-asyncio-runner",
"direct": false,
"version": "1.2.0",
"ecosystem": "pypi"
},
{
"name": "backports-datetime-fromisoformat",
"direct": false,
"version": "2.0.3",
"ecosystem": "pypi"
},
{
"name": "backports-tarfile",
"direct": false,
"version": "1.2.0",
"ecosystem": "pypi"
},
{
"name": "backrefs",
"direct": false,
"version": "8.0",
"ecosystem": "pypi"
},
{
"name": "bandit",
"direct": false,
"version": "1.9.4",
"ecosystem": "pypi"
},
{
"name": "bandit-sarif-formatter",
"direct": false,
"version": "1.1.1",
"ecosystem": "pypi"
},
{
"name": "bidict",
"direct": false,
"version": "0.23.1",
"ecosystem": "pypi"
},
{
"name": "boolean-py",
"direct": false,
"version": "5.0",
"ecosystem": "pypi"
},
{
"name": "build",
"direct": false,
"version": "1.5.0",
"ecosystem": "pypi"
},
{
"name": "bump2version",
"direct": false,
"version": "1.0.1",
"ecosystem": "pypi"
},
{
"name": "cachecontrol",
"direct": false,
"version": "0.14.4",
"ecosystem": "pypi"
},
{
"name": "certifi",
"direct": false,
"version": "2026.7.22",
"ecosystem": "pypi"
},
{
"name": "cffi",
"direct": false,
"version": "2.1.0",
"ecosystem": "pypi"
},
{
"name": "cfgv",
"direct": false,
"version": "3.5.0",
"ecosystem": "pypi"
},
{
"name": "cfn-lint",
"direct": false,
"version": "1.53.2",
"ecosystem": "pypi"
},
{
"name": "chardet",
"direct": false,
"version": "5.2.0",
"ecosystem": "pypi"
},
{
"name": "charset-normalizer",
"direct": false,
"version": "3.4.9",
"ecosystem": "pypi"
},
{
"name": "click",
"direct": false,
"version": "8.4.2",
"ecosystem": "pypi"
},
{
"name": "click-option-group",
"direct": false,
"version": "0.5.9",
"ecosystem": "pypi"
},
{
"name": "colorama",
"direct": false,
"version": "0.4.6",
"ecosystem": "pypi"
},
{
"name": "coverage",
"direct": false,
"version": "7.15.2",
"ecosystem": "pypi"
},
{
"name": "cyclonedx-bom",
"direct": false,
"version": "7.3.1",
"ecosystem": "pypi"
},
{
"name": "cyclonedx-python-lib",
"direct": false,
"version": "11.11.0",
"ecosystem": "pypi"
},
{
"name": "decorator",
"direct": false,
"version": "5.3.1",
"ecosystem": "pypi"
},
{
"name": "defusedxml",
"direct": false,
"version": "0.7.1",
"ecosystem": "pypi"
},
{
"name": "deprecated",
"direct": false,
"version": "1.3.1",
"ecosystem": "pypi"
},
{
"name": "distlib",
"direct": false,
"version": "0.4.3",
"ecosystem": "pypi"
},
{
"name": "docker",
"direct": false,
"version": "7.2.0",
"ecosystem": "pypi"
},
{
"name": "docutils",
"direct": false,
"version": "0.23",
"ecosystem": "pypi"
},
{
"name": "dotty-dict",
"direct": false,
"version": "1.3.1",
"ecosystem": "pypi"
},
{
"name": "dparse",
"direct": false,
"version": "0.6.4",
"ecosystem": "pypi"
},
{
"name": "durationpy",
"direct": false,
"version": "0.10",
"ecosystem": "pypi"
},
{
"name": "exceptiongroup",
"direct": false,
"version": "1.3.1",
"ecosystem": "pypi"
},
{
"name": "execnet",
"direct": false,
"version": "2.1.2",
"ecosystem": "pypi"
},
{
"name": "executing",
"direct": false,
"version": "2.2.1",
"ecosystem": "pypi"
},
{
"name": "fastapi",
"direct": false,
"version": "0.140.0",
"ecosystem": "pypi"
},
{
"name": "frozenlist",
"direct": false,
"version": "1.8.0",
"ecosystem": "pypi"
},
{
"name": "ghp-import",
"direct": false,
"version": "2.1.0",
"ecosystem": "pypi"
},
{
"name": "git-changelog",
"direct": false,
"version": "2.9.4",
"ecosystem": "pypi"
},
{
"name": "gitdb",
"direct": false,
"version": "4.0.12",
"ecosystem": "pypi"
},
{
"name": "gitpython",
"direct": false,
"version": "3.1.57",
"ecosystem": "pypi"
},
{
"name": "granian",
"direct": false,
"version": "2.7.9",
"ecosystem": "pypi"
},
{
"name": "graphql-core",
"direct": false,
"version": "3.2.11",
"ecosystem": "pypi"
},
{
"name": "greenlet",
"direct": false,
"version": "3.5.4",
"ecosystem": "pypi"
},
{
"name": "griffelib",
"direct": false,
"version": "2.1.0",
"ecosystem": "pypi"
},
{
"name": "grimp",
"direct": false,
"version": "3.15",
"ecosystem": "pypi"
},
{
"name": "h11",
"direct": false,
"version": "0.16.0",
"ecosystem": "pypi"
},
{
"name": "httpcore",
"direct": false,
"version": "1.0.9",
"ecosystem": "pypi"
},
{
"name": "httpx",
"direct": false,
"version": "0.28.1",
"ecosystem": "pypi"
},
{
"name": "httpx-sse",
"direct": false,
"version": "0.4.3",
"ecosystem": "pypi"
},
{
"name": "id",
"direct": false,
"version": "1.6.1",
"ecosystem": "pypi"
},
{
"name": "identify",
"direct": false,
"version": "2.6.19",
"ecosystem": "pypi"
},
{
"name": "idna",
"direct": false,
"version": "3.18",
"ecosystem": "pypi"
},
{
"name": "import-linter",
"direct": false,
"version": "2.13",
"ecosystem": "pypi"
},
{
"name": "importlib-metadata",
"direct": false,
"version": "9.0.0",
"ecosystem": "pypi"
},
{
"name": "importlib-resources",
"direct": false,
"version": "6.5.2",
"ecosystem": "pypi"
},
{
"name": "iniconfig",
"direct": false,
"version": "2.3.0",
"ecosystem": "pypi"
},
{
"name": "ipdb",
"direct": false,
"version": "0.13.13",
"ecosystem": "pypi"
},
{
"name": "ipython",
"direct": false,
"version": "8.39.0",
"ecosystem": "pypi"
},
{
"name": "jaraco-classes",
"direct": false,
"version": "3.4.0",
"ecosystem": "pypi"
},
{
"name": "jaraco-context",
"direct": false,
"version": "6.1.2",
"ecosystem": "pypi"
},
{
"name": "jaraco-functools",
"direct": false,
"version": "4.6.0",
"ecosystem": "pypi"
},
{
"name": "jedi",
"direct": false,
"version": "0.20.0",
"ecosystem": "pypi"
},
{
"name": "jeepney",
"direct": false,
"version": "0.9.0",
"ecosystem": "pypi"
},
{
"name": "jinja2",
"direct": false,
"version": "3.1.6",
"ecosystem": "pypi"
},
{
"name": "jmespath",
"direct": false,
"version": "1.1.0",
"ecosystem": "pypi"
},
{
"name": "joblib",
"direct": false,
"version": "1.5.3",
"ecosystem": "pypi"
},
{
"name": "joserfc",
"direct": false,
"version": "1.7.4",
"ecosystem": "pypi"
},
{
"name": "jschema-to-python",
"direct": false,
"version": "1.2.3",
"ecosystem": "pypi"
},
{
"name": "jsonpatch",
"direct": false,
"version": "1.33",
"ecosystem": "pypi"
},
{
"name": "jsonpath-ng",
"direct": false,
"version": "1.8.0",
"ecosystem": "pypi"
},
{
"name": "jsonpickle",
"direct": false,
"version": "4.1.2",
"ecosystem": "pypi"
},
{
"name": "jsonpointer",
"direct": false,
"version": "3.1.1",
"ecosystem": "pypi"
},
{
"name": "jsonschema-path",
"direct": false,
"version": "0.5.0",
"ecosystem": "pypi"
},
{
"name": "jsonschema-specifications",
"direct": false,
"version": "2025.9.1",
"ecosystem": "pypi"
},
{
"name": "keyring",
"direct": false,
"version": "25.7.0",
"ecosystem": "pypi"
},
{
"name": "kmock",
"direct": false,
"version": "0.7",
"ecosystem": "pypi"
},
{
"name": "kubernetes",
"direct": false,
"version": "36.0.3",
"ecosystem": "pypi"
},
{
"name": "kubernetes-stubs-elephant-fork",
"direct": false,
"version": "36.0.3.post1",
"ecosystem": "pypi"
},
{
"name": "lazy-object-proxy",
"direct": false,
"version": "1.12.0",
"ecosystem": "pypi"
},
{
"name": "license-expression",
"direct": false,
"version": "30.4.4",
"ecosystem": "pypi"
},
{
"name": "line-profiler",
"direct": false,
"version": "5.0.2",
"ecosystem": "pypi"
},
{
"name": "lxml",
"direct": false,
"version": "6.1.1",
"ecosystem": "pypi"
},
{
"name": "mako",
"direct": false,
"version": "1.3.12",
"ecosystem": "pypi"
},
{
"name": "mando",
"direct": false,
"version": "0.7.1",
"ecosystem": "pypi"
},
{
"name": "markdown",
"direct": false,
"version": "3.10.2",
"ecosystem": "pypi"
},
{
"name": "markdown-it-py",
"direct": false,
"version": "4.2.0",
"ecosystem": "pypi"
},
{
"name": "markupsafe",
"direct": false,
"version": "3.0.3",
"ecosystem": "pypi"
},
{
"name": "marshmallow",
"direct": false,
"version": "4.3.0",
"ecosystem": "pypi"
},
{
"name": "matplotlib-inline",
"direct": false,
"version": "0.2.2",
"ecosystem": "pypi"
},
{
"name": "mcp",
"direct": false,
"version": "1.28.1",
"ecosystem": "pypi"
},
{
"name": "mdurl",
"direct": false,
"version": "0.1.2",
"ecosystem": "pypi"
},
{
"name": "memory-profiler",
"direct": false,
"version": "0.61.0",
"ecosystem": "pypi"
},
{
"name": "mergedeep",
"direct": false,
"version": "1.3.4",
"ecosystem": "pypi"
},
{
"name": "mike",
"direct": false,
"version": "2.2.0",
"ecosystem": "pypi"
},
{
"name": "mkdocs",
"direct": false,
"version": "1.6.1",
"ecosystem": "pypi"
},
{
"name": "mkdocs-autorefs",
"direct": false,
"version": "1.4.4",
"ecosystem": "pypi"
},
{
"name": "mkdocs-gen-files",
"direct": false,
"version": "0.6.1",
"ecosystem": "pypi"
},
{
"name": "mkdocs-get-deps",
"direct": false,
"version": "0.2.2",
"ecosystem": "pypi"
},
{
"name": "mkdocs-literate-nav",
"direct": false,
"version": "0.6.3",
"ecosystem": "pypi"
},
{
"name": "mkdocs-material",
"direct": false,
"version": "9.7.7",
"ecosystem": "pypi"
},
{
"name": "mkdocs-material-extensions",
"direct": false,
"version": "1.3.1",
"ecosystem": "pypi"
},
{
"name": "mkdocs-section-index",
"direct": false,
"version": "0.3.12",
"ecosystem": "pypi"
},
{
"name": "mkdocstrings",
"direct": false,
"version": "1.0.6",
"ecosystem": "pypi"
},
{
"name": "mkdocstrings-python",
"direct": false,
"version": "2.0.5",
"ecosystem": "pypi"
},
{
"name": "more-itertools",
"direct": false,
"version": "11.1.0",
"ecosystem": "pypi"
},
{
"name": "moto",
"direct": false,
"version": "5.2.2",
"ecosystem": "pypi"
},
{
"name": "mpmath",
"direct": false,
"version": "1.3.0",
"ecosystem": "pypi"
},
{
"name": "msgpack",
"direct": false,
"version": "1.2.1",
"ecosystem": "pypi"
},
{
"name": "multidict",
"direct": false,
"version": "6.7.1",
"ecosystem": "pypi"
},
{
"name": "multipart",
"direct": false,
"version": "2.0.0",
"ecosystem": "pypi"
},
{
"name": "networkx",
"direct": false,
"version": "3.4.2",
"ecosystem": "pypi"
},
{
"name": "networkx",
"direct": false,
"version": "3.6.1",
"ecosystem": "pypi"
},
{
"name": "nh3",
"direct": false,
"version": "0.3.6",
"ecosystem": "pypi"
},
{
"name": "nltk",
"direct": false,
"version": "3.10.0",
"ecosystem": "pypi"
},
{
"name": "nodeenv",
"direct": false,
"version": "1.10.0",
"ecosystem": "pypi"
},
{
"name": "oauthlib",
"direct": false,
"version": "3.3.1",
"ecosystem": "pypi"
},
{
"name": "openapi-schema-validator",
"direct": false,
"version": "0.9.0",
"ecosystem": "pypi"
},
{
"name": "openapi-spec-validator",
"direct": false,
"version": "0.9.0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-api",
"direct": false,
"version": "1.44.0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-exporter-prometheus",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-instrumentation",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-instrumentation-asgi",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-instrumentation-botocore",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-instrumentation-click",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-instrumentation-fastapi",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-instrumentation-logging",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-instrumentation-sqlalchemy",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-instrumentation-system-metrics",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-propagator-aws-xray",
"direct": false,
"version": "1.0.2",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-sdk",
"direct": false,
"version": "1.44.0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-semantic-conventions",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "opentelemetry-util-http",
"direct": false,
"version": "0.65b0",
"ecosystem": "pypi"
},
{
"name": "orb-py",
"direct": false,
"version": "1.8.5",
"ecosystem": "pypi"
},
{
"name": "packageurl-python",
"direct": false,
"version": "0.17.6",
"ecosystem": "pypi"
},
{
"name": "packaging",
"direct": false,
"version": "26.2",
"ecosystem": "pypi"
},
{
"name": "paginate",
"direct": false,
"version": "0.5.7",
"ecosystem": "pypi"
},
{
"name": "parso",
"direct": false,
"version": "0.8.7",
"ecosystem": "pypi"
},
{
"name": "pathable",
"direct": false,
"version": "0.6.0",
"ecosystem": "pypi"
},
{
"name": "pathspec",
"direct": false,
"version": "1.1.1",
"ecosystem": "pypi"
},
{
"name": "pbr",
"direct": false,
"version": "7.0.3",
"ecosystem": "pypi"
},
{
"name": "peewee",
"direct": false,
"version": "4.2.6",
"ecosystem": "pypi"
},
{
"name": "pexpect",
"direct": false,
"version": "4.9.0",
"ecosystem": "pypi"
},
{
"name": "pg8000",
"direct": false,
"version": "1.31.5",
"ecosystem": "pypi"
},
{
"name": "pip",
"direct": false,
"version": "26.1.2",
"ecosystem": "pypi"
},
{
"name": "pip-api",
"direct": false,
"version": "0.0.34",
"ecosystem": "pypi"
},
{
"name": "pip-audit",
"direct": false,
"version": "2.10.1",
"ecosystem": "pypi"
},
{
"name": "pip-requirements-parser",
"direct": false,
"version": "32.0.1",
"ecosystem": "pypi"
},
{
"name": "pip-tools",
"direct": false,
"version": "7.6.0",
"ecosystem": "pypi"
},
{
"name": "platformdirs",
"direct": false,
"version": "4.11.0",
"ecosystem": "pypi"
},
{
"name": "pluggy",
"direct": false,
"version": "1.6.0",
"ecosystem": "pypi"
},
{
"name": "pre-commit",
"direct": false,
"version": "4.6.1",
"ecosystem": "pypi"
},
{
"name": "prometheus-client",
"direct": false,
"version": "0.26.0",
"ecosystem": "pypi"
},
{
"name": "prompt-toolkit",
"direct": false,
"version": "3.0.53",
"ecosystem": "pypi"
},
{
"name": "propcache",
"direct": false,
"version": "0.5.2",
"ecosystem": "pypi"
},
{
"name": "properdocs",
"direct": false,
"version": "1.6.7",
"ecosystem": "pypi"
},
{
"name": "ptyprocess",
"direct": false,
"version": "0.7.0",
"ecosystem": "pypi"
},
{
"name": "pure-eval",
"direct": false,
"version": "0.2.3",
"ecosystem": "pypi"
},
{
"name": "py-cpuinfo",
"direct": false,
"version": "9.0.0",
"ecosystem": "pypi"
},
{
"name": "py-partiql-parser",
"direct": false,
"version": "0.6.3",
"ecosystem": "pypi"
},
{
"name": "py-serializable",
"direct": false,
"version": "2.1.0",
"ecosystem": "pypi"
},
{
"name": "py-spy",
"direct": false,
"version": "0.4.2",
"ecosystem": "pypi"
},
{
"name": "pycparser",
"direct": false,
"version": "3.0",
"ecosystem": "pypi"
},
{
"name": "pydantic-core",
"direct": false,
"version": "2.46.4",
"ecosystem": "pypi"
},
{
"name": "pygments",
"direct": false,
"version": "2.20.0",
"ecosystem": "pypi"
},
{
"name": "pymdown-extensions",
"direct": false,
"version": "11.0.1",
"ecosystem": "pypi"
},
{
"name": "pyparsing",
"direct": false,
"version": "3.3.2",
"ecosystem": "pypi"
},
{
"name": "pyproject-hooks",
"direct": false,
"version": "1.2.0",
"ecosystem": "pypi"
},
{
"name": "pyright",
"direct": false,
"version": "1.1.411",
"ecosystem": "pypi"
},
{
"name": "pytest",
"direct": false,
"version": "9.1.1",
"ecosystem": "pypi"
},
{
"name": "pytest-asyncio",
"direct": false,
"version": "1.4.0",
"ecosystem": "pypi"
},
{
"name": "pytest-benchmark",
"direct": false,
"version": "5.2.3",
"ecosystem": "pypi"
},
{
"name": "pytest-cov",
"direct": false,
"version": "7.1.0",
"ecosystem": "pypi"
},
{
"name": "pytest-env",
"direct": false,
"version": "1.7.0",
"ecosystem": "pypi"
},
{
"name": "pytest-html",
"direct": false,
"version": "4.2.0",
"ecosystem": "pypi"
},
{
"name": "pytest-metadata",
"direct": false,
"version": "3.1.1",
"ecosystem": "pypi"
},
{
"name": "pytest-mock",
"direct": false,
"version": "3.15.1",
"ecosystem": "pypi"
},
{
"name": "pytest-timeout",
"direct": false,
"version": "2.4.0",
"ecosystem": "pypi"
},
{
"name": "pytest-xdist",
"direct": false,
"version": "3.8.0",
"ecosystem": "pypi"
},
{
"name": "python-dateutil",
"direct": false,
"version": "2.9.0.post0",
"ecosystem": "pypi"
},
{
"name": "python-discovery",
"direct": false,
"version": "1.5.0",
"ecosystem": "pypi"
},
{
"name": "python-dotenv",
"direct": false,
"version": "1.2.2",
"ecosystem": "pypi"
},
{
"name": "python-engineio",
"direct": false,
"version": "4.13.3",
"ecosystem": "pypi"
},
{
"name": "python-gitlab",
"direct": false,
"version": "8.4.0",
"ecosystem": "pypi"
},
{
"name": "python-multipart",
"direct": false,
"version": "0.0.32",
"ecosystem": "pypi"
},
{
"name": "python-semantic-release",
"direct": false,
"version": "10.6.1",
"ecosystem": "pypi"
},
{
"name": "python-socketio",
"direct": false,
"version": "5.16.3",
"ecosystem": "pypi"
},
{
"name": "pywin32",
"direct": false,
"version": "312",
"ecosystem": "pypi"
},
{
"name": "pywin32-ctypes",
"direct": false,
"version": "0.2.3",
"ecosystem": "pypi"
},
{
"name": "pyyaml-env-tag",
"direct": false,
"version": "1.1",
"ecosystem": "pypi"
},
{
"name": "radon",
"direct": false,
"version": "6.0.1",
"ecosystem": "pypi"
},
{
"name": "readme-renderer",
"direct": false,
"version": "45.0",
"ecosystem": "pypi"
},
{
"name": "redis",
"direct": false,
"version": "7.4.1",
"ecosystem": "pypi"
},
{
"name": "referencing",
"direct": false,
"version": "0.37.0",
"ecosystem": "pypi"
},
{
"name": "reflex",
"direct": false,
"version": "0.9.7",
"ecosystem": "pypi"
},
{
"name": "reflex-base",
"direct": false,
"version": "0.9.7",
"ecosystem": "pypi"
},
{
"name": "reflex-components-code",
"direct": false,
"version": "0.9.2",
"ecosystem": "pypi"
},
{
"name": "reflex-components-core",
"direct": false,
"version": "0.9.7",
"ecosystem": "pypi"
},
{
"name": "reflex-components-dataeditor",
"direct": false,
"version": "0.9.1",
"ecosystem": "pypi"
},
{
"name": "reflex-components-gridjs",
"direct": false,
"version": "0.9.1",
"ecosystem": "pypi"
},
{
"name": "reflex-components-lucide",
"direct": false,
"version": "1.0.2",
"ecosystem": "pypi"
},
{
"name": "reflex-components-markdown",
"direct": false,
"version": "0.9.3",
"ecosystem": "pypi"
},
{
"name": "reflex-components-moment",
"direct": false,
"version": "0.9.2",
"ecosystem": "pypi"
},
{
"name": "reflex-components-plotly",
"direct": false,
"version": "0.9.3",
"ecosystem": "pypi"
},
{
"name": "reflex-components-radix",
"direct": false,
"version": "0.9.6",
"ecosystem": "pypi"
},
{
"name": "reflex-components-react-player",
"direct": false,
"version": "0.9.1",
"ecosystem": "pypi"
},
{
"name": "reflex-components-recharts",
"direct": false,
"version": "0.9.1",
"ecosystem": "pypi"
},
{
"name": "reflex-components-sonner",
"direct": false,
"version": "0.9.1",
"ecosystem": "pypi"
},
{
"name": "reflex-hosting-cli",
"direct": false,
"version": "0.1.67",
"ecosystem": "pypi"
},
{
"name": "regex",
"direct": false,
"version": "2026.7.19",
"ecosystem": "pypi"
},
{
"name": "requests-mock",
"direct": false,
"version": "1.12.1",
"ecosystem": "pypi"
},
{
"name": "requests-oauthlib",
"direct": false,
"version": "2.0.0",
"ecosystem": "pypi"
},
{
"name": "requests-toolbelt",
"direct": false,
"version": "1.0.0",
"ecosystem": "pypi"
},
{
"name": "responses",
"direct": false,
"version": "0.26.2",
"ecosystem": "pypi"
},
{
"name": "rfc3339-validator",
"direct": false,
"version": "0.1.4",
"ecosystem": "pypi"
},
{
"name": "rfc3986",
"direct": false,
"version": "2.0.0",
"ecosystem": "pypi"
},
{
"name": "rich",
"direct": false,
"version": "14.3.4",
"ecosystem": "pypi"
},
{
"name": "rich-argparse",
"direct": false,
"version": "1.8.0",
"ecosystem": "pypi"
},
{
"name": "rpds-py",
"direct": false,
"version": "0.30.0",
"ecosystem": "pypi"
},
{
"name": "rpds-py",
"direct": false,
"version": "2026.6.3",
"ecosystem": "pypi"
},
{
"name": "ruamel-yaml",
"direct": false,
"version": "0.19.1",
"ecosystem": "pypi"
},
{
"name": "ruff",
"direct": false,
"version": "0.16.0",
"ecosystem": "pypi"
},
{
"name": "s3transfer",
"direct": false,
"version": "0.19.2",
"ecosystem": "pypi"
},
{
"name": "safety",
"direct": false,
"version": "3.8.1",
"ecosystem": "pypi"
},
{
"name": "safety-schemas",
"direct": false,
"version": "0.0.16",
"ecosystem": "pypi"
},
{
"name": "sarif-om",
"direct": false,
"version": "1.0.4",
"ecosystem": "pypi"
},
{
"name": "scramp",
"direct": false,
"version": "1.4.15",
"ecosystem": "pypi"
},
{
"name": "secretstorage",
"direct": false,
"version": "3.5.0",
"ecosystem": "pypi"
},
{
"name": "semver",
"direct": false,
"version": "3.0.4",
"ecosystem": "pypi"
},
{
"name": "setuptools",
"direct": false,
"version": "83.0.0",
"ecosystem": "pypi"
},
{
"name": "shellingham",
"direct": false,
"version": "1.5.4",
"ecosystem": "pypi"
},
{
"name": "simple-websocket",
"direct": false,
"version": "1.1.0",
"ecosystem": "pypi"
},
{
"name": "six",
"direct": false,
"version": "1.17.0",
"ecosystem": "pypi"
},
{
"name": "smmap",
"direct": false,
"version": "5.0.3",
"ecosystem": "pypi"
},
{
"name": "sortedcontainers",
"direct": false,
"version": "2.4.0",
"ecosystem": "pypi"
},
{
"name": "sse-starlette",
"direct": false,
"version": "3.4.6",
"ecosystem": "pypi"
},
{
"name": "stack-data",
"direct": false,
"version": "0.6.3",
"ecosystem": "pypi"
},
{
"name": "starlette",
"direct": false,
"version": "1.3.1",
"ecosystem": "pypi"
},
{
"name": "stevedore",
"direct": false,
"version": "5.8.0",
"ecosystem": "pypi"
},
{
"name": "stevedore",
"direct": false,
"version": "5.9.0",
"ecosystem": "pypi"
},
{
"name": "sympy",
"direct": false,
"version": "1.14.0",
"ecosystem": "pypi"
},
{
"name": "tenacity",
"direct": false,
"version": "9.1.4",
"ecosystem": "pypi"
},
{
"name": "tomli",
"direct": false,
"version": "2.4.1",
"ecosystem": "pypi"
},
{
"name": "tomli-w",
"direct": false,
"version": "1.2.0",
"ecosystem": "pypi"
},
{
"name": "tomlkit",
"direct": false,
"version": "0.13.3",
"ecosystem": "pypi"
},
{
"name": "tqdm",
"direct": false,
"version": "4.69.1",
"ecosystem": "pypi"
},
{
"name": "traitlets",
"direct": false,
"version": "5.15.1",
"ecosystem": "pypi"
},
{
"name": "truststore",
"direct": false,
"version": "0.10.4",
"ecosystem": "pypi"
},
{
"name": "twine",
"direct": false,
"version": "6.2.0",
"ecosystem": "pypi"
},
{
"name": "typer",
"direct": false,
"version": "0.25.1",
"ecosystem": "pypi"
},
{
"name": "types-python-dateutil",
"direct": false,
"version": "2.9.0.20260716",
"ecosystem": "pypi"
},
{
"name": "types-pyyaml",
"direct": false,
"version": "6.0.12.20260724",
"ecosystem": "pypi"
},
{
"name": "typing-extensions",
"direct": false,
"version": "4.16.0",
"ecosystem": "pypi"
},
{
"name": "typing-inspection",
"direct": false,
"version": "0.4.2",
"ecosystem": "pypi"
},
{
"name": "uvicorn",
"direct": false,
"version": "0.51.0",
"ecosystem": "pypi"
},
{
"name": "verspec",
"direct": false,
"version": "0.1.0",
"ecosystem": "pypi"
},
{
"name": "virtualenv",
"direct": false,
"version": "21.7.0",
"ecosystem": "pypi"
},
{
"name": "watchdog",
"direct": false,
"version": "6.0.0",
"ecosystem": "pypi"
},
{
"name": "watchfiles",
"direct": false,
"version": "1.2.0",
"ecosystem": "pypi"
},
{
"name": "wcwidth",
"direct": false,
"version": "0.8.2",
"ecosystem": "pypi"
},
{
"name": "websocket-client",
"direct": false,
"version": "1.9.0",
"ecosystem": "pypi"
},
{
"name": "werkzeug",
"direct": false,
"version": "3.1.8",
"ecosystem": "pypi"
},
{
"name": "wheel",
"direct": false,
"version": "0.47.0",
"ecosystem": "pypi"
},
{
"name": "wrapt",
"direct": false,
"version": "2.1.2",
"ecosystem": "pypi"
},
{
"name": "wsproto",
"direct": false,
"version": "1.3.2",
"ecosystem": "pypi"
},
{
"name": "xmltodict",
"direct": false,
"version": "1.0.4",
"ecosystem": "pypi"
},
{
"name": "yarl",
"direct": false,
"version": "1.24.5",
"ecosystem": "pypi"
},
{
"name": "zipp",
"direct": false,
"version": "4.1.0",
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 721,
"direct_count": 13,
"indirect_count": 708
}
},
"maintainership": {
"issues": {
"open_prs": 8,
"merged_prs": 285,
"open_issues": 2,
"closed_ratio": 0.667,
"closed_issues": 4,
"closed_unmerged_prs": 53
},
"bus_factor": 1,
"bot_contributors": 3,
"top_contributors": [
{
"type": "User",
"login": "fgogolli",
"commits": 2771,
"avatar_url": "https://avatars.githubusercontent.com/u/18527931?v=4"
},
{
"type": "User",
"login": "kirillsc",
"commits": 155,
"avatar_url": "https://avatars.githubusercontent.com/u/8685088?v=4"
},
{
"type": "User",
"login": "cyriaquem",
"commits": 19,
"avatar_url": "https://avatars.githubusercontent.com/u/200204670?v=4"
},
{
"type": "User",
"login": "canonicalname",
"commits": 16,
"avatar_url": "https://avatars.githubusercontent.com/u/30214253?v=4"
},
{
"type": "User",
"login": "bingenito",
"commits": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/28159742?v=4"
},
{
"type": "User",
"login": "jsiembida",
"commits": 6,
"avatar_url": "https://avatars.githubusercontent.com/u/3470141?v=4"
},
{
"type": "User",
"login": "finos-admin",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/37706051?v=4"
},
{
"type": "User",
"login": "TheJuanAndOnly99",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/36825759?v=4"
}
],
"contributors_sampled": 8,
"top_contributor_share": 0.931
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"changelog-validation.yml",
"ci-quality.yml",
"ci-tests.yml",
"container-cleanup-dev.yml",
"container-cleanup-on-release.yml",
"dependabot.yml",
"dev-containers.yml",
"dev-pypi.yml",
"dev-sdk.yml",
"docs.yml",
"package-testing.yml",
"pr-sdk-dryrun.yml",
"prod-release.yml",
"reusable-sdk-publish.yml",
"reusable-security.yml",
"reusable-test.yml",
"scorecard.yml",
"sdk.yml",
"security-code.yml",
"semantic-release.yml",
"shared-config.yml",
"test-matrix.yml",
"validate-workflows.yml"
],
"has_docs_dir": true,
"linter_configs": [
".golangci.yml",
"ruff.toml",
"tox.ini"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": true
},
"security_signals": {
"lockfiles": [
"package-lock.json",
"uv.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 8,
"reason": "binaries present in source code",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 6,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 5,
"reason": "badge detected: Passing",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 10,
"reason": "all changesets reviewed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 4 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 5,
"reason": "dependency not pinned by hash detected -- score normalized to 5",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 10,
"reason": "SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 6,
"reason": "3 out of the last 5 releases have a total of 3 signed artifacts.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 8,
"reason": "2 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "68891fcc24071eb5c20f2f64a871137300bfc77f",
"ran_at": "2026-07-29T11:41:16Z",
"aggregate_score": 8.3,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": true
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-29T05:10:28Z",
"oldest_open_prs": [
{
"number": 214,
"created_at": "2026-05-11T15:45:02Z",
"last_comment_at": "2026-05-11T15:57:32Z",
"last_comment_author": "github-actions"
},
{
"number": 215,
"created_at": "2026-05-13T12:52:04Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 220,
"created_at": "2026-05-18T20:43:00Z",
"last_comment_at": "2026-06-09T12:11:00Z",
"last_comment_author": "kirillsc"
},
{
"number": 234,
"created_at": "2026-06-07T06:28:27Z",
"last_comment_at": "2026-07-10T10:34:57Z",
"last_comment_author": "fgogolli"
},
{
"number": 246,
"created_at": "2026-06-10T18:40:18Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 256,
"created_at": "2026-06-19T09:46:24Z",
"last_comment_at": "2026-07-08T13:40:07Z",
"last_comment_author": "fgogolli"
},
{
"number": 257,
"created_at": "2026-06-19T09:46:59Z",
"last_comment_at": "2026-07-10T10:34:56Z",
"last_comment_author": "fgogolli"
},
{
"number": 258,
"created_at": "2026-06-19T09:47:25Z",
"last_comment_at": "2026-07-16T13:45:20Z",
"last_comment_author": "codecov-commenter"
}
],
"last_merged_pr_at": "2026-07-28T12:21:16Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 59,
"created_at": "2025-10-05T17:27:20Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 76,
"created_at": "2025-11-25T13:20:07Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/finos/open-resource-broker",
"host": "github.com",
"name": "open-resource-broker",
"owner": "finos"
},
"metrics": {
"overall": {
"key": "overall",
"band": "exceptional",
"name": "Overall health",
"note": "The weighted overall 81 is calibrated to 94 on the published index scale (record calibration 2026-08-02).",
"notes": [
{
"code": "overall_calibration",
"params": {
"raw": 81,
"calibrated": 94,
"calibration": "2026-08-02"
}
}
],
"value": 94,
"inputs": {
"security": 86,
"vitality": 97,
"community": 61,
"governance": 69,
"calibration": "2026-08-02",
"engineering": 92,
"ai_readiness": 87,
"weighted_overall_raw": 81
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "exceptional",
"name": "Vitality",
"value": 97,
"weight": 0.21,
"metrics": [
{
"key": "development_activity",
"band": "exceptional",
"name": "Development activity",
"note": null,
"notes": [],
"value": 98,
"inputs": {
"commits_last_year": 3256,
"human_commit_share": 0.95,
"days_since_last_push": 0,
"active_weeks_last_year": 49
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "49/52 weeks with commits",
"points": 33.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 49
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "3256 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 3256
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "exceptional",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 96,
"inputs": {
"releases_count": 28,
"latest_release_tag": "v1.8.5",
"releases_from_tags": false,
"days_since_latest_release": 4,
"mean_days_between_releases": 6.3
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "28 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 28
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 4 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 4
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~6.3 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 6.3
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "3 out of the last 5 releases have a total of 3 signed artifacts.",
"points": 6,
"status": "partial",
"details": [],
"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": 5,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 5 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 5
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 61,
"weight": 0.17,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 28,
"inputs": {
"forks": 10,
"stars": 18,
"watchers": 2,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "18 stars",
"points": 20,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 18
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "10 forks",
"points": 8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 10
}
}
],
"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": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"has_readme": true,
"has_license": true,
"readme_badges": null,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"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 (Apache-2.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "Apache-2.0"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 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": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 69,
"inputs": {
"packages": [
"github.com/finos/open-resource-broker",
"orb-py"
],
"dependents": null,
"ecosystems": "go, pypi",
"total_downloads": null,
"monthly_downloads": 13502
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "13,502 downloads/month across go, pypi",
"points": 55.1,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 13502,
"ecosystems": "go, pypi"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "good",
"name": "Sustainability & Governance",
"value": 69,
"weight": 0.23,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 31,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 8,
"top_contributor_share": 0.931
},
"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 93% of commits",
"points": 1.6,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 93
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "8 contributors",
"points": 10.8,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 8
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 4 contributing companies or organizations",
"points": 10,
"status": "met",
"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": 79,
"inputs": {
"merged_prs": 285,
"open_issues": 2,
"closed_issues": 4,
"prs_merged_7d": null,
"prs_decided_7d": null,
"prs_merged_30d": null,
"prs_decided_30d": null,
"issue_closed_ratio": 0.667,
"closed_unmerged_prs": 53,
"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": "67% of issues closed",
"points": 28,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 67
}
}
],
"max_points": 42
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "285/338 decided PRs merged",
"points": 25.3,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 285,
"decided": 338
}
}
],
"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": "all changesets reviewed",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 78,
"inputs": {
"followers": 1572,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "finos",
"public_repos": 191,
"account_age_days": 3119
},
"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": "1,572 followers of finos",
"points": 23,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 1572,
"login": "finos"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "191 public repos, account ~8 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 191
}
},
{
"code": "account_age_years",
"params": {
"years": 8
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "exceptional",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/finos/open-resource-broker",
"orb-py"
],
"ecosystems": "go, pypi",
"any_deprecated": false,
"min_days_since_publish": 4
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "2 package(s) on go, pypi",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 2,
"ecosystems": "go, pypi"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 4 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 4
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "27 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 27
}
}
],
"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": "excellent",
"name": "Engineering Quality",
"value": 92,
"weight": 0.19,
"metrics": [
{
"key": "engineering_practices",
"band": "exceptional",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 94,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": true
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "23 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 23
}
}
],
"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": ".golangci.yml, ruff.toml, tox.ini",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml, ruff.toml, tox.ini"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 9.6,
"status": "met",
"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": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": "https://finos.github.io/open-resource-broker/",
"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": "https://finos.github.io/open-resource-broker/",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": 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": "excellent",
"name": "Security",
"value": 86,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "excellent",
"name": "Security posture",
"note": null,
"notes": [],
"value": 83,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 18,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 0,
"scorecard_aggregate": 8.3
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "binaries present in source code",
"points": 6,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection is not maximal on development and all release branches",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "4 out of 4 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "badge detected: Passing",
"points": 1.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "all changesets reviewed",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 4 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 5",
"points": 2.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "3 out of the last 5 releases have a total of 3 signed artifacts.",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "2 existing vulnerabilities detected",
"points": 6,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "exceptional",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the pypi:orb-py@1.8.5 runtime dependency closure — what installing the published package pulls in — 32 packages. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_published",
"params": {
"package": "pypi:orb-py@1.8.5",
"assessed": 32
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 32,
"unassessed_packages": 0,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "no indirect dependency carries a known advisory",
"points": 25,
"status": "met",
"details": [
{
"code": "no_indirect_advisories",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "exceptional",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 32,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "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": "excellent",
"name": "AI Readiness",
"value": 87,
"weight": 0.04,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
"k8s-legacy/AGENTS.md"
],
"agent_instruction_max_bytes": 1328
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "k8s-legacy/AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "k8s-legacy/AGENTS.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "95 of 95 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 95,
"sampled": 95
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "excellent",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_nix": true,
"has_tests": true,
"lockfiles": [
"package-lock.json",
"uv.lock"
],
"has_dockerfile": true,
"typed_language": false,
"bootstrap_files": [
"Makefile",
"sdk/go/Makefile"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"sdk/typescript/tsconfig.json",
"src/orb/api/documentation/py.typed",
"src/orb/api/middleware/py.typed",
"src/orb/api/models/py.typed",
"src/orb/api/py.typed",
"src/orb/api/routers/py.typed",
"src/orb/application/base/py.typed",
"src/orb/application/commands/py.typed",
"src/orb/application/dto/py.typed",
"src/orb/application/events/base/py.typed",
"src/orb/application/events/bus/py.typed",
"src/orb/application/events/handlers/py.typed",
"src/orb/application/events/py.typed",
"src/orb/application/interfaces/py.typed",
"src/orb/application/machine/py.typed",
"src/orb/application/provider/py.typed",
"src/orb/application/py.typed",
"src/orb/application/queries/py.typed",
"src/orb/application/request/py.typed",
"src/orb/application/template/py.typed",
"src/orb/cli/py.typed",
"src/orb/config/managers/py.typed",
"src/orb/config/py.typed",
"src/orb/config/schemas/py.typed",
"src/orb/config/utils/py.typed",
"src/orb/config/validators/py.typed",
"src/orb/domain/base/events/py.typed",
"src/orb/domain/base/ports/py.typed",
"src/orb/domain/base/py.typed",
"src/orb/domain/machine/py.typed",
"src/orb/domain/py.typed",
"src/orb/domain/request/py.typed",
"src/orb/domain/template/py.typed",
"src/orb/infrastructure/adapters/factories/py.typed",
"src/orb/infrastructure/adapters/ports/auth/py.typed",
"src/orb/infrastructure/adapters/ports/py.typed",
"src/orb/infrastructure/adapters/py.typed",
"src/orb/infrastructure/auth/py.typed",
"src/orb/infrastructure/auth/strategy/py.typed",
"src/orb/infrastructure/caching/py.typed",
"src/orb/infrastructure/di/components/py.typed",
"src/orb/infrastructure/di/py.typed",
"src/orb/infrastructure/error/py.typed",
"src/orb/infrastructure/events/py.typed",
"src/orb/infrastructure/handlers/base/py.typed",
"src/orb/infrastructure/handlers/py.typed",
"src/orb/infrastructure/interfaces/py.typed",
"src/orb/infrastructure/logging/py.typed",
"src/orb/infrastructure/mocking/py.typed",
"src/orb/infrastructure/patterns/py.typed",
"src/orb/infrastructure/py.typed",
"src/orb/infrastructure/registry/py.typed",
"src/orb/infrastructure/resilience/py.typed",
"src/orb/infrastructure/resilience/strategy/py.typed",
"src/orb/infrastructure/scheduler/base/py.typed",
"src/orb/infrastructure/scheduler/default/py.typed",
"src/orb/infrastructure/scheduler/hostfactory/py.typed",
"src/orb/infrastructure/scheduler/py.typed",
"src/orb/infrastructure/serialization/py.typed",
"src/orb/infrastructure/storage/base/py.typed",
"src/orb/infrastructure/storage/components/py.typed",
"src/orb/infrastructure/storage/json/py.typed",
"src/orb/infrastructure/storage/py.typed",
"src/orb/infrastructure/storage/repositories/py.typed",
"src/orb/infrastructure/storage/sql/py.typed",
"src/orb/infrastructure/template/py.typed",
"src/orb/infrastructure/utilities/common/collections/py.typed",
"src/orb/infrastructure/utilities/common/py.typed",
"src/orb/infrastructure/utilities/factories/py.typed",
"src/orb/infrastructure/utilities/file/py.typed",
"src/orb/infrastructure/utilities/py.typed",
"src/orb/interface/py.typed",
"src/orb/monitoring/py.typed",
"src/orb/providers/aws/application/events/py.typed",
"src/orb/providers/aws/application/machine/py.typed",
"src/orb/providers/aws/application/py.typed",
"src/orb/providers/aws/application/request/py.typed",
"src/orb/providers/aws/application/template/py.typed",
"src/orb/providers/aws/auth/py.typed",
"src/orb/providers/aws/configuration/py.typed",
"src/orb/providers/aws/domain/machine/py.typed",
"src/orb/providers/aws/domain/py.typed",
"src/orb/providers/aws/domain/request/py.typed",
"src/orb/providers/aws/domain/template/py.typed",
"src/orb/providers/aws/exceptions/py.typed",
"src/orb/providers/aws/infrastructure/adapters/py.typed",
"src/orb/providers/aws/infrastructure/handlers/components/py.typed",
"src/orb/providers/aws/infrastructure/handlers/py.typed",
"src/orb/providers/aws/infrastructure/launch_template/py.typed",
"src/orb/providers/aws/infrastructure/py.typed",
"src/orb/providers/aws/infrastructure/template/py.typed",
"src/orb/providers/aws/persistence/py.typed",
"src/orb/providers/aws/py.typed",
"src/orb/providers/aws/resilience/py.typed",
"src/orb/providers/aws/storage/components/py.typed",
"src/orb/providers/aws/storage/py.typed",
"src/orb/providers/aws/strategy/py.typed",
"src/orb/providers/aws/utilities/ec2/py.typed",
"src/orb/providers/aws/utilities/py.typed",
"src/orb/providers/base/py.typed",
"src/orb/providers/base/strategy/load_balancing/py.typed",
"src/orb/providers/base/strategy/py.typed",
"src/orb/providers/k8s/adapters/py.typed",
"src/orb/providers/k8s/auth/py.typed",
"src/orb/providers/k8s/cli/py.typed",
"src/orb/providers/k8s/config/py.typed",
"src/orb/providers/k8s/configuration/py.typed",
"src/orb/providers/k8s/domain/py.typed",
"src/orb/providers/k8s/domain/template/py.typed",
"src/orb/providers/k8s/exceptions/py.typed",
"src/orb/providers/k8s/infrastructure/adapters/py.typed",
"src/orb/providers/k8s/infrastructure/handlers/py.typed",
"src/orb/providers/k8s/infrastructure/handlers/shared/py.typed",
"src/orb/providers/k8s/infrastructure/instrumentation/py.typed",
"src/orb/providers/k8s/infrastructure/py.typed",
"src/orb/providers/k8s/infrastructure/services/py.typed",
"src/orb/providers/k8s/py.typed",
"src/orb/providers/k8s/reconciliation/py.typed",
"src/orb/providers/k8s/resilience/py.typed",
"src/orb/providers/k8s/scheduler/py.typed",
"src/orb/providers/k8s/services/py.typed",
"src/orb/providers/k8s/strategy/py.typed",
"src/orb/providers/k8s/utilities/py.typed",
"src/orb/providers/k8s/validation/py.typed",
"src/orb/providers/k8s/watch/py.typed",
"src/orb/providers/py.typed",
"src/orb/sdk/py.typed",
"src/py.typed"
],
"agent_commit_share": 0,
"toolchain_manifests": [
"go.mod",
"sdk/csharp/src/FINOS.OpenResourceBroker/FINOS.OpenResourceBroker.csproj",
"sdk/csharp/tests/contract/ContractTests.csproj",
"sdk/csharp/tests/parity/ParityTests.csproj",
"sdk/csharp/tests/unit/UnitTests.csproj",
"sdk/go/go.mod",
"sdk/java/build.gradle",
"sdk/kotlin/build.gradle.kts"
],
"dependency_bot_commit_share": 0.03
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile, sdk/go/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile, sdk/go/Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": ".golangci.yml, ruff.toml, tox.ini",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml, ruff.toml, tox.ini"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "sdk/typescript/tsconfig.json, src/orb/api/documentation/py.typed, src/orb/api/middleware/py.typed, src/orb/api/models/py.typed, src/orb/api/py.typed, src/orb/api/routers/py.typed, src/orb/application/base/py.typed, src/orb/application/commands/py.typed, src/orb/application/dto/py.typed, src/orb/application/events/base/py.typed, src/orb/application/events/bus/py.typed, src/orb/application/events/handlers/py.typed, src/orb/application/events/py.typed, src/orb/application/interfaces/py.typed, src/orb/application/machine/py.typed, src/orb/application/provider/py.typed, src/orb/application/py.typed, src/orb/application/queries/py.typed, src/orb/application/request/py.typed, src/orb/application/template/py.typed, src/orb/cli/py.typed, src/orb/config/managers/py.typed, src/orb/config/py.typed, src/orb/config/schemas/py.typed, src/orb/config/utils/py.typed, src/orb/config/validators/py.typed, src/orb/domain/base/events/py.typed, src/orb/domain/base/ports/py.typed, src/orb/domain/base/py.typed, src/orb/domain/machine/py.typed, src/orb/domain/py.typed, src/orb/domain/request/py.typed, src/orb/domain/template/py.typed, src/orb/infrastructure/adapters/factories/py.typed, src/orb/infrastructure/adapters/ports/auth/py.typed, src/orb/infrastructure/adapters/ports/py.typed, src/orb/infrastructure/adapters/py.typed, src/orb/infrastructure/auth/py.typed, src/orb/infrastructure/auth/strategy/py.typed, src/orb/infrastructure/caching/py.typed, src/orb/infrastructure/di/components/py.typed, src/orb/infrastructure/di/py.typed, src/orb/infrastructure/error/py.typed, src/orb/infrastructure/events/py.typed, src/orb/infrastructure/handlers/base/py.typed, src/orb/infrastructure/handlers/py.typed, src/orb/infrastructure/interfaces/py.typed, src/orb/infrastructure/logging/py.typed, src/orb/infrastructure/mocking/py.typed, src/orb/infrastructure/patterns/py.typed, src/orb/infrastructure/py.typed, src/orb/infrastructure/registry/py.typed, src/orb/infrastructure/resilience/py.typed, src/orb/infrastructure/resilience/strategy/py.typed, src/orb/infrastructure/scheduler/base/py.typed, src/orb/infrastructure/scheduler/default/py.typed, src/orb/infrastructure/scheduler/hostfactory/py.typed, src/orb/infrastructure/scheduler/py.typed, src/orb/infrastructure/serialization/py.typed, src/orb/infrastructure/storage/base/py.typed, src/orb/infrastructure/storage/components/py.typed, src/orb/infrastructure/storage/json/py.typed, src/orb/infrastructure/storage/py.typed, src/orb/infrastructure/storage/repositories/py.typed, src/orb/infrastructure/storage/sql/py.typed, src/orb/infrastructure/template/py.typed, src/orb/infrastructure/utilities/common/collections/py.typed, src/orb/infrastructure/utilities/common/py.typed, src/orb/infrastructure/utilities/factories/py.typed, src/orb/infrastructure/utilities/file/py.typed, src/orb/infrastructure/utilities/py.typed, src/orb/interface/py.typed, src/orb/monitoring/py.typed, src/orb/providers/aws/application/events/py.typed, src/orb/providers/aws/application/machine/py.typed, src/orb/providers/aws/application/py.typed, src/orb/providers/aws/application/request/py.typed, src/orb/providers/aws/application/template/py.typed, src/orb/providers/aws/auth/py.typed, src/orb/providers/aws/configuration/py.typed, src/orb/providers/aws/domain/machine/py.typed, src/orb/providers/aws/domain/py.typed, src/orb/providers/aws/domain/request/py.typed, src/orb/providers/aws/domain/template/py.typed, src/orb/providers/aws/exceptions/py.typed, src/orb/providers/aws/infrastructure/adapters/py.typed, src/orb/providers/aws/infrastructure/handlers/components/py.typed, src/orb/providers/aws/infrastructure/handlers/py.typed, src/orb/providers/aws/infrastructure/launch_template/py.typed, src/orb/providers/aws/infrastructure/py.typed, src/orb/providers/aws/infrastructure/template/py.typed, src/orb/providers/aws/persistence/py.typed, src/orb/providers/aws/py.typed, src/orb/providers/aws/resilience/py.typed, src/orb/providers/aws/storage/components/py.typed, src/orb/providers/aws/storage/py.typed, src/orb/providers/aws/strategy/py.typed, src/orb/providers/aws/utilities/ec2/py.typed, src/orb/providers/aws/utilities/py.typed, src/orb/providers/base/py.typed, src/orb/providers/base/strategy/load_balancing/py.typed, src/orb/providers/base/strategy/py.typed, src/orb/providers/k8s/adapters/py.typed, src/orb/providers/k8s/auth/py.typed, src/orb/providers/k8s/cli/py.typed, src/orb/providers/k8s/config/py.typed, src/orb/providers/k8s/configuration/py.typed, src/orb/providers/k8s/domain/py.typed, src/orb/providers/k8s/domain/template/py.typed, src/orb/providers/k8s/exceptions/py.typed, src/orb/providers/k8s/infrastructure/adapters/py.typed, src/orb/providers/k8s/infrastructure/handlers/py.typed, src/orb/providers/k8s/infrastructure/handlers/shared/py.typed, src/orb/providers/k8s/infrastructure/instrumentation/py.typed, src/orb/providers/k8s/infrastructure/py.typed, src/orb/providers/k8s/infrastructure/services/py.typed, src/orb/providers/k8s/py.typed, src/orb/providers/k8s/reconciliation/py.typed, src/orb/providers/k8s/resilience/py.typed, src/orb/providers/k8s/scheduler/py.typed, src/orb/providers/k8s/services/py.typed, src/orb/providers/k8s/strategy/py.typed, src/orb/providers/k8s/utilities/py.typed, src/orb/providers/k8s/validation/py.typed, src/orb/providers/k8s/watch/py.typed, src/orb/providers/py.typed, src/orb/sdk/py.typed, src/py.typed",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "sdk/typescript/tsconfig.json, src/orb/api/documentation/py.typed, src/orb/api/middleware/py.typed, src/orb/api/models/py.typed, src/orb/api/py.typed, src/orb/api/routers/py.typed, src/orb/application/base/py.typed, src/orb/application/commands/py.typed, src/orb/application/dto/py.typed, src/orb/application/events/base/py.typed, src/orb/application/events/bus/py.typed, src/orb/application/events/handlers/py.typed, src/orb/application/events/py.typed, src/orb/application/interfaces/py.typed, src/orb/application/machine/py.typed, src/orb/application/provider/py.typed, src/orb/application/py.typed, src/orb/application/queries/py.typed, src/orb/application/request/py.typed, src/orb/application/template/py.typed, src/orb/cli/py.typed, src/orb/config/managers/py.typed, src/orb/config/py.typed, src/orb/config/schemas/py.typed, src/orb/config/utils/py.typed, src/orb/config/validators/py.typed, src/orb/domain/base/events/py.typed, src/orb/domain/base/ports/py.typed, src/orb/domain/base/py.typed, src/orb/domain/machine/py.typed, src/orb/domain/py.typed, src/orb/domain/request/py.typed, src/orb/domain/template/py.typed, src/orb/infrastructure/adapters/factories/py.typed, src/orb/infrastructure/adapters/ports/auth/py.typed, src/orb/infrastructure/adapters/ports/py.typed, src/orb/infrastructure/adapters/py.typed, src/orb/infrastructure/auth/py.typed, src/orb/infrastructure/auth/strategy/py.typed, src/orb/infrastructure/caching/py.typed, src/orb/infrastructure/di/components/py.typed, src/orb/infrastructure/di/py.typed, src/orb/infrastructure/error/py.typed, src/orb/infrastructure/events/py.typed, src/orb/infrastructure/handlers/base/py.typed, src/orb/infrastructure/handlers/py.typed, src/orb/infrastructure/interfaces/py.typed, src/orb/infrastructure/logging/py.typed, src/orb/infrastructure/mocking/py.typed, src/orb/infrastructure/patterns/py.typed, src/orb/infrastructure/py.typed, src/orb/infrastructure/registry/py.typed, src/orb/infrastructure/resilience/py.typed, src/orb/infrastructure/resilience/strategy/py.typed, src/orb/infrastructure/scheduler/base/py.typed, src/orb/infrastructure/scheduler/default/py.typed, src/orb/infrastructure/scheduler/hostfactory/py.typed, src/orb/infrastructure/scheduler/py.typed, src/orb/infrastructure/serialization/py.typed, src/orb/infrastructure/storage/base/py.typed, src/orb/infrastructure/storage/components/py.typed, src/orb/infrastructure/storage/json/py.typed, src/orb/infrastructure/storage/py.typed, src/orb/infrastructure/storage/repositories/py.typed, src/orb/infrastructure/storage/sql/py.typed, src/orb/infrastructure/template/py.typed, src/orb/infrastructure/utilities/common/collections/py.typed, src/orb/infrastructure/utilities/common/py.typed, src/orb/infrastructure/utilities/factories/py.typed, src/orb/infrastructure/utilities/file/py.typed, src/orb/infrastructure/utilities/py.typed, src/orb/interface/py.typed, src/orb/monitoring/py.typed, src/orb/providers/aws/application/events/py.typed, src/orb/providers/aws/application/machine/py.typed, src/orb/providers/aws/application/py.typed, src/orb/providers/aws/application/request/py.typed, src/orb/providers/aws/application/template/py.typed, src/orb/providers/aws/auth/py.typed, src/orb/providers/aws/configuration/py.typed, src/orb/providers/aws/domain/machine/py.typed, src/orb/providers/aws/domain/py.typed, src/orb/providers/aws/domain/request/py.typed, src/orb/providers/aws/domain/template/py.typed, src/orb/providers/aws/exceptions/py.typed, src/orb/providers/aws/infrastructure/adapters/py.typed, src/orb/providers/aws/infrastructure/handlers/components/py.typed, src/orb/providers/aws/infrastructure/handlers/py.typed, src/orb/providers/aws/infrastructure/launch_template/py.typed, src/orb/providers/aws/infrastructure/py.typed, src/orb/providers/aws/infrastructure/template/py.typed, src/orb/providers/aws/persistence/py.typed, src/orb/providers/aws/py.typed, src/orb/providers/aws/resilience/py.typed, src/orb/providers/aws/storage/components/py.typed, src/orb/providers/aws/storage/py.typed, src/orb/providers/aws/strategy/py.typed, src/orb/providers/aws/utilities/ec2/py.typed, src/orb/providers/aws/utilities/py.typed, src/orb/providers/base/py.typed, src/orb/providers/base/strategy/load_balancing/py.typed, src/orb/providers/base/strategy/py.typed, src/orb/providers/k8s/adapters/py.typed, src/orb/providers/k8s/auth/py.typed, src/orb/providers/k8s/cli/py.typed, src/orb/providers/k8s/config/py.typed, src/orb/providers/k8s/configuration/py.typed, src/orb/providers/k8s/domain/py.typed, src/orb/providers/k8s/domain/template/py.typed, src/orb/providers/k8s/exceptions/py.typed, src/orb/providers/k8s/infrastructure/adapters/py.typed, src/orb/providers/k8s/infrastructure/handlers/py.typed, src/orb/providers/k8s/infrastructure/handlers/shared/py.typed, src/orb/providers/k8s/infrastructure/instrumentation/py.typed, src/orb/providers/k8s/infrastructure/py.typed, src/orb/providers/k8s/infrastructure/services/py.typed, src/orb/providers/k8s/py.typed, src/orb/providers/k8s/reconciliation/py.typed, src/orb/providers/k8s/resilience/py.typed, src/orb/providers/k8s/scheduler/py.typed, src/orb/providers/k8s/services/py.typed, src/orb/providers/k8s/strategy/py.typed, src/orb/providers/k8s/utilities/py.typed, src/orb/providers/k8s/validation/py.typed, src/orb/providers/k8s/watch/py.typed, src/orb/providers/py.typed, src/orb/sdk/py.typed, src/py.typed"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, Nix, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, Nix, 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": "3 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 3,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 5",
"points": 5,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 110768,
"source_files_sampled": 2139,
"oversized_source_files": 9
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python with type-check config (sdk/typescript/tsconfig.json, src/orb/api/documentation/py.typed, src/orb/api/middleware/py.typed, src/orb/api/models/py.typed, src/orb/api/py.typed, src/orb/api/routers/py.typed, src/orb/application/base/py.typed, src/orb/application/commands/py.typed, src/orb/application/dto/py.typed, src/orb/application/events/base/py.typed, src/orb/application/events/bus/py.typed, src/orb/application/events/handlers/py.typed, src/orb/application/events/py.typed, src/orb/application/interfaces/py.typed, src/orb/application/machine/py.typed, src/orb/application/provider/py.typed, src/orb/application/py.typed, src/orb/application/queries/py.typed, src/orb/application/request/py.typed, src/orb/application/template/py.typed, src/orb/cli/py.typed, src/orb/config/managers/py.typed, src/orb/config/py.typed, src/orb/config/schemas/py.typed, src/orb/config/utils/py.typed, src/orb/config/validators/py.typed, src/orb/domain/base/events/py.typed, src/orb/domain/base/ports/py.typed, src/orb/domain/base/py.typed, src/orb/domain/machine/py.typed, src/orb/domain/py.typed, src/orb/domain/request/py.typed, src/orb/domain/template/py.typed, src/orb/infrastructure/adapters/factories/py.typed, src/orb/infrastructure/adapters/ports/auth/py.typed, src/orb/infrastructure/adapters/ports/py.typed, src/orb/infrastructure/adapters/py.typed, src/orb/infrastructure/auth/py.typed, src/orb/infrastructure/auth/strategy/py.typed, src/orb/infrastructure/caching/py.typed, src/orb/infrastructure/di/components/py.typed, src/orb/infrastructure/di/py.typed, src/orb/infrastructure/error/py.typed, src/orb/infrastructure/events/py.typed, src/orb/infrastructure/handlers/base/py.typed, src/orb/infrastructure/handlers/py.typed, src/orb/infrastructure/interfaces/py.typed, src/orb/infrastructure/logging/py.typed, src/orb/infrastructure/mocking/py.typed, src/orb/infrastructure/patterns/py.typed, src/orb/infrastructure/py.typed, src/orb/infrastructure/registry/py.typed, src/orb/infrastructure/resilience/py.typed, src/orb/infrastructure/resilience/strategy/py.typed, src/orb/infrastructure/scheduler/base/py.typed, src/orb/infrastructure/scheduler/default/py.typed, src/orb/infrastructure/scheduler/hostfactory/py.typed, src/orb/infrastructure/scheduler/py.typed, src/orb/infrastructure/serialization/py.typed, src/orb/infrastructure/storage/base/py.typed, src/orb/infrastructure/storage/components/py.typed, src/orb/infrastructure/storage/json/py.typed, src/orb/infrastructure/storage/py.typed, src/orb/infrastructure/storage/repositories/py.typed, src/orb/infrastructure/storage/sql/py.typed, src/orb/infrastructure/template/py.typed, src/orb/infrastructure/utilities/common/collections/py.typed, src/orb/infrastructure/utilities/common/py.typed, src/orb/infrastructure/utilities/factories/py.typed, src/orb/infrastructure/utilities/file/py.typed, src/orb/infrastructure/utilities/py.typed, src/orb/interface/py.typed, src/orb/monitoring/py.typed, src/orb/providers/aws/application/events/py.typed, src/orb/providers/aws/application/machine/py.typed, src/orb/providers/aws/application/py.typed, src/orb/providers/aws/application/request/py.typed, src/orb/providers/aws/application/template/py.typed, src/orb/providers/aws/auth/py.typed, src/orb/providers/aws/configuration/py.typed, src/orb/providers/aws/domain/machine/py.typed, src/orb/providers/aws/domain/py.typed, src/orb/providers/aws/domain/request/py.typed, src/orb/providers/aws/domain/template/py.typed, src/orb/providers/aws/exceptions/py.typed, src/orb/providers/aws/infrastructure/adapters/py.typed, src/orb/providers/aws/infrastructure/handlers/components/py.typed, src/orb/providers/aws/infrastructure/handlers/py.typed, src/orb/providers/aws/infrastructure/launch_template/py.typed, src/orb/providers/aws/infrastructure/py.typed, src/orb/providers/aws/infrastructure/template/py.typed, src/orb/providers/aws/persistence/py.typed, src/orb/providers/aws/py.typed, src/orb/providers/aws/resilience/py.typed, src/orb/providers/aws/storage/components/py.typed, src/orb/providers/aws/storage/py.typed, src/orb/providers/aws/strategy/py.typed, src/orb/providers/aws/utilities/ec2/py.typed, src/orb/providers/aws/utilities/py.typed, src/orb/providers/base/py.typed, src/orb/providers/base/strategy/load_balancing/py.typed, src/orb/providers/base/strategy/py.typed, src/orb/providers/k8s/adapters/py.typed, src/orb/providers/k8s/auth/py.typed, src/orb/providers/k8s/cli/py.typed, src/orb/providers/k8s/config/py.typed, src/orb/providers/k8s/configuration/py.typed, src/orb/providers/k8s/domain/py.typed, src/orb/providers/k8s/domain/template/py.typed, src/orb/providers/k8s/exceptions/py.typed, src/orb/providers/k8s/infrastructure/adapters/py.typed, src/orb/providers/k8s/infrastructure/handlers/py.typed, src/orb/providers/k8s/infrastructure/handlers/shared/py.typed, src/orb/providers/k8s/infrastructure/instrumentation/py.typed, src/orb/providers/k8s/infrastructure/py.typed, src/orb/providers/k8s/infrastructure/services/py.typed, src/orb/providers/k8s/py.typed, src/orb/providers/k8s/reconciliation/py.typed, src/orb/providers/k8s/resilience/py.typed, src/orb/providers/k8s/scheduler/py.typed, src/orb/providers/k8s/services/py.typed, src/orb/providers/k8s/strategy/py.typed, src/orb/providers/k8s/utilities/py.typed, src/orb/providers/k8s/validation/py.typed, src/orb/providers/k8s/watch/py.typed, src/orb/providers/py.typed, src/orb/sdk/py.typed, src/py.typed)",
"points": 27,
"status": "partial",
"details": [
{
"code": "typecheck_config_language",
"params": {
"files": "sdk/typescript/tsconfig.json, src/orb/api/documentation/py.typed, src/orb/api/middleware/py.typed, src/orb/api/models/py.typed, src/orb/api/py.typed, src/orb/api/routers/py.typed, src/orb/application/base/py.typed, src/orb/application/commands/py.typed, src/orb/application/dto/py.typed, src/orb/application/events/base/py.typed, src/orb/application/events/bus/py.typed, src/orb/application/events/handlers/py.typed, src/orb/application/events/py.typed, src/orb/application/interfaces/py.typed, src/orb/application/machine/py.typed, src/orb/application/provider/py.typed, src/orb/application/py.typed, src/orb/application/queries/py.typed, src/orb/application/request/py.typed, src/orb/application/template/py.typed, src/orb/cli/py.typed, src/orb/config/managers/py.typed, src/orb/config/py.typed, src/orb/config/schemas/py.typed, src/orb/config/utils/py.typed, src/orb/config/validators/py.typed, src/orb/domain/base/events/py.typed, src/orb/domain/base/ports/py.typed, src/orb/domain/base/py.typed, src/orb/domain/machine/py.typed, src/orb/domain/py.typed, src/orb/domain/request/py.typed, src/orb/domain/template/py.typed, src/orb/infrastructure/adapters/factories/py.typed, src/orb/infrastructure/adapters/ports/auth/py.typed, src/orb/infrastructure/adapters/ports/py.typed, src/orb/infrastructure/adapters/py.typed, src/orb/infrastructure/auth/py.typed, src/orb/infrastructure/auth/strategy/py.typed, src/orb/infrastructure/caching/py.typed, src/orb/infrastructure/di/components/py.typed, src/orb/infrastructure/di/py.typed, src/orb/infrastructure/error/py.typed, src/orb/infrastructure/events/py.typed, src/orb/infrastructure/handlers/base/py.typed, src/orb/infrastructure/handlers/py.typed, src/orb/infrastructure/interfaces/py.typed, src/orb/infrastructure/logging/py.typed, src/orb/infrastructure/mocking/py.typed, src/orb/infrastructure/patterns/py.typed, src/orb/infrastructure/py.typed, src/orb/infrastructure/registry/py.typed, src/orb/infrastructure/resilience/py.typed, src/orb/infrastructure/resilience/strategy/py.typed, src/orb/infrastructure/scheduler/base/py.typed, src/orb/infrastructure/scheduler/default/py.typed, src/orb/infrastructure/scheduler/hostfactory/py.typed, src/orb/infrastructure/scheduler/py.typed, src/orb/infrastructure/serialization/py.typed, src/orb/infrastructure/storage/base/py.typed, src/orb/infrastructure/storage/components/py.typed, src/orb/infrastructure/storage/json/py.typed, src/orb/infrastructure/storage/py.typed, src/orb/infrastructure/storage/repositories/py.typed, src/orb/infrastructure/storage/sql/py.typed, src/orb/infrastructure/template/py.typed, src/orb/infrastructure/utilities/common/collections/py.typed, src/orb/infrastructure/utilities/common/py.typed, src/orb/infrastructure/utilities/factories/py.typed, src/orb/infrastructure/utilities/file/py.typed, src/orb/infrastructure/utilities/py.typed, src/orb/interface/py.typed, src/orb/monitoring/py.typed, src/orb/providers/aws/application/events/py.typed, src/orb/providers/aws/application/machine/py.typed, src/orb/providers/aws/application/py.typed, src/orb/providers/aws/application/request/py.typed, src/orb/providers/aws/application/template/py.typed, src/orb/providers/aws/auth/py.typed, src/orb/providers/aws/configuration/py.typed, src/orb/providers/aws/domain/machine/py.typed, src/orb/providers/aws/domain/py.typed, src/orb/providers/aws/domain/request/py.typed, src/orb/providers/aws/domain/template/py.typed, src/orb/providers/aws/exceptions/py.typed, src/orb/providers/aws/infrastructure/adapters/py.typed, src/orb/providers/aws/infrastructure/handlers/components/py.typed, src/orb/providers/aws/infrastructure/handlers/py.typed, src/orb/providers/aws/infrastructure/launch_template/py.typed, src/orb/providers/aws/infrastructure/py.typed, src/orb/providers/aws/infrastructure/template/py.typed, src/orb/providers/aws/persistence/py.typed, src/orb/providers/aws/py.typed, src/orb/providers/aws/resilience/py.typed, src/orb/providers/aws/storage/components/py.typed, src/orb/providers/aws/storage/py.typed, src/orb/providers/aws/strategy/py.typed, src/orb/providers/aws/utilities/ec2/py.typed, src/orb/providers/aws/utilities/py.typed, src/orb/providers/base/py.typed, src/orb/providers/base/strategy/load_balancing/py.typed, src/orb/providers/base/strategy/py.typed, src/orb/providers/k8s/adapters/py.typed, src/orb/providers/k8s/auth/py.typed, src/orb/providers/k8s/cli/py.typed, src/orb/providers/k8s/config/py.typed, src/orb/providers/k8s/configuration/py.typed, src/orb/providers/k8s/domain/py.typed, src/orb/providers/k8s/domain/template/py.typed, src/orb/providers/k8s/exceptions/py.typed, src/orb/providers/k8s/infrastructure/adapters/py.typed, src/orb/providers/k8s/infrastructure/handlers/py.typed, src/orb/providers/k8s/infrastructure/handlers/shared/py.typed, src/orb/providers/k8s/infrastructure/instrumentation/py.typed, src/orb/providers/k8s/infrastructure/py.typed, src/orb/providers/k8s/infrastructure/services/py.typed, src/orb/providers/k8s/py.typed, src/orb/providers/k8s/reconciliation/py.typed, src/orb/providers/k8s/resilience/py.typed, src/orb/providers/k8s/scheduler/py.typed, src/orb/providers/k8s/services/py.typed, src/orb/providers/k8s/strategy/py.typed, src/orb/providers/k8s/utilities/py.typed, src/orb/providers/k8s/validation/py.typed, src/orb/providers/k8s/watch/py.typed, src/orb/providers/py.typed, src/orb/sdk/py.typed, src/py.typed",
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "9/2139 source files over 60KB",
"points": 54.8,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 2139,
"oversized": 9
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "exceptional",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"api_schema_files": [
"sdk/spec/openapi.json"
]
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": "sdk/spec/openapi.json",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "sdk/spec/openapi.json"
}
}
],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"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": {
"labels": [
"library",
"mcp-server"
],
"scores": {
"cli": 2,
"sdk": 2,
"library": 12,
"mcp-server": 5,
"network-service": 3
},
"primary": "library",
"evidence": [
{
"tier": "distribution",
"label": "library",
"source": "registry:go",
"weight": 6
},
{
"tier": "distribution",
"label": "library",
"source": "registry:pypi",
"weight": 6
},
{
"tier": "structure",
"label": "mcp-server",
"source": "mcp_signal",
"weight": 3
},
{
"tier": "structure",
"label": "network-service",
"source": "api_schema",
"weight": 3
},
{
"tier": "description",
"label": "cli",
"source": "description:cli",
"weight": 2
},
{
"tier": "description",
"label": "mcp-server",
"source": "description:mcp-server",
"weight": 2
},
{
"tier": "description",
"label": "sdk",
"source": "description:sdk",
"weight": 2
}
],
"artifacts": [],
"confidence": "medium",
"host_extension": false,
"runs_as_process": true,
"consumed_by_code": true
},
"metrics_version": "2.3.1"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-29T11:41:43.427827Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/finos/open-resource-broker.svg",
"full_name": "finos/open-resource-broker",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}