原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 21156,
"has_wiki": false,
"homepage": null,
"languages": {
"Go": 2184797,
"CSS": 72263,
"HTML": 343207,
"Shell": 16674,
"Python": 108657,
"Makefile": 30573,
"Dockerfile": 10081,
"JavaScript": 2903,
"TypeScript": 745464,
"Go Template": 6047
},
"pushed_at": "2026-07-19T03:16:08Z",
"created_at": "2026-04-16T13:40:52Z",
"owner_type": "Organization",
"updated_at": "2026-07-19T03:12:38Z",
"description": null,
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "main",
"license_spdx_raw": "Apache-2.0",
"primary_language": "Go",
"significant_languages": [
"Go",
"TypeScript"
]
},
"owner": {
"blog": "https://www.axisml.io",
"name": "AxisML",
"type": "Organization",
"login": "AxisML",
"company": null,
"location": "China",
"followers": 0,
"avatar_url": "https://avatars.githubusercontent.com/u/276537827?v=4",
"created_at": "2026-04-16T08:19:13Z",
"is_verified": null,
"public_repos": 2,
"account_age_days": 96
},
"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": [],
"recent_commits": [
{
"oid": "1d887dac9ff1d706b8f76d3d1647faeef9872b74",
"body": null,
"is_bot": false,
"headline": "chore(deps): prepare system modules v0.0.2 (#114)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-19T03:12:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "81399ed5cf154d398698f8329ad4c0a4941dbd62",
"body": "* feat: support workload-owned configmaps\n\n* test(system): satisfy staticcheck in API doc test",
"is_bot": false,
"headline": "feat: support workload-owned configmaps (#113)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-19T02:17:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f700a26601874df6d070ca76615ed375d16dc5f",
"body": null,
"is_bot": false,
"headline": "refactor(system): isolate lite module dependencies (#112)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-17T17:37:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "016806e7fdebf5f2df32a0aeb222df6122c73ad2",
"body": null,
"is_bot": false,
"headline": "refactor(repo): remove AxisML Lite (#111)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-17T02:38:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df28302763d16221ea39014ab0307507e50a146d",
"body": null,
"is_bot": false,
"headline": "feat: unify workload naming across runtimes (#110)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-14T16:35:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2da77ea03a532dfaaa18ae32c3f7b4b6d2cadcb7",
"body": null,
"is_bot": false,
"headline": "fix(lite): create hostPath subPaths with binds (#109)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-14T12:35:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "61f606602305177c24774c776b0ffec919c73e23",
"body": null,
"is_bot": false,
"headline": "fix: derive workload quota from tenant and pool (#108)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-14T02:43:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8634093ae5d89bb83472f485e34000147802ddf6",
"body": null,
"is_bot": false,
"headline": "feat(lite): create writable hostPath subPath mounts (#107)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-13T19:09:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0736babd719052beafb633ec89ab8c27b11d119d",
"body": "The Lite runtime previously read only name/mountPath/readOnly from each\nvolumeMount, so a subPath was silently ignored and the whole volume root\nwas mounted. That forced one volume per subdirectory.\n\nRender subPath now: managed named volumes carry it via Docker\nVolumeOptions.Subpath; hostPath (bind)\n[…]\nenv expansion Lite\ndoesn't do) is likewise rejected. subPath rides in the plan's spec hash,\nso changing it rebuilds the container.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(lite): honor volumeMount subPath for shared volumes (#106)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-13T08:09:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a09a329e0bde0d7b5be1db7766b8115c0a8598a2",
"body": "…#105)\n\nDrop NVML autodetection (AXISML_GPU_DEVICES=all) and the cgo/go-nvml\ndependency. AXISML_GPU_DEVICES now takes only explicit indices, which turn on\nmanaged scheduling over those cards; unset leaves managed scheduling off and GPU\nworkloads fall back to Docker's default count-based DeviceReques\n[…]\ner-compose example, and the design doc\n\nThe compute-service Pending state machine is unchanged; it only activates in\nmanaged mode.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(lite): config-only GPU scheduling with Docker-default fallback (…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-13T04:41:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e94e8572462472884c8ba18e6ea62cce9cb5f3b1",
"body": "Let admins configure which physical GPUs AxisML may schedule onto via\nAXISML_GPU_DEVICES (explicit indices \"0,1,2\", \"all\" for NVML autodetect, or\nunset to disable GPU). Workloads are pinned to free cards via Docker\nDeviceRequest.DeviceIDs; when no card is free they wait in Pending and are\nplaced aut\n[…]\ne\n\"waiting service not silently deleted\" regression (mlservice). Design under\naxisml-lite/docs/proposals/gpu-device-scheduling.md.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(lite): single-host GPU device scheduling (#104)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-13T02:28:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "99aa900c858167fe98c61d3a7c9c5f8b81c9562f",
"body": "Add a closing step to the run-tests skill: once a live environment\n(Lite compose or Standard minikube) has been brought up and results\nreported, ask the user whether to close it instead of tearing down\nunprompted or leaving it dangling. Skips for hermetic Go-only runs.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: prompt whether to tear down env after run-tests (#103)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-12T06:38:13Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "59f885f167a449dd0b24db3af8a55599f785306f",
"body": "The run-tests skill covered Go unit, Go integration, and the black-box\nAPI tests (Lite + Standard) but omitted the Playwright UI e2e suite\n(tests/e2e/, standard_only), so \"run the full tests\" skipped it.\n\n- Add a UI e2e row to the layers table and the run order\n- Document the one-time `uv run playwr\n[…]\nRename the black-box section (API + UI e2e) and clarify that Lite/Standard\n API are one suite in two --modes, not separate layers\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add UI e2e layer to run-tests skill (#102)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-12T06:08:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "373b6034f9816dedebd4b03221c134a17fb82e23",
"body": "Pin LYCHEE_VERSION so the hook skips its git-describe auto-detection, which failed in pre-commit's shallow clone and blocked every commit/push.",
"is_bot": false,
"headline": "build: fix lychee pre-commit hook version detection (#100)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-12T05:24:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9378ef987beb23d68f92a3fc8341e81abdcbac70",
"body": "Lite loads one or more read-only pools/tenants from config/resourcepools/ and config/tenants/ (one object per file). Providers serve all presets; Platform bootstrap imports every System-defined tenant. Re-integrates #97's tenant predefined volumes into the multi-tenant loader with a cross-tenant hostPath-name-uniqueness guard.",
"is_bot": false,
"headline": "feat(lite): support multiple config-defined pools and tenants (#98)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-12T03:55:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb40a3e6dae75c2856382d1105956493b8cb70b4",
"body": "A project-level Claude Code skill (.claude/skills/run-tests/) that documents\nhow to run the Go unit, Go integration, and Lite/Standard black-box API\nsuites — the exact commands, environment bring-up/teardown, and the known\nbring-up gotchas (frontend build gating the platform image, the Lite :8080\nport conflict, stale tests/clients regeneration, and the image-load minikube\nprofile mismatch).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: add run-tests skill for the four test layers (#101)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-12T03:35:50Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "aac5f602893ee0570edeff4309feaf79fd92e6c1",
"body": "* fix(system): retry tenant quota mutation on optimistic-lock conflict\n\nA freshly-created Tenant is written repeatedly by the operator's initial\nreconcile, so the previous single-retry read-modify-write in the tenant\nhandler lost the race and surfaced a 409 OptimisticLockConflict to callers\nthat set\n[…]\nha1NamespaceSpec ->\nTenantv1Alpha1NamespaceSpec).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: bring Lite + Standard API test suites to green (#99)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-12T03:18:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "49910e17c7e5fa829bf3b79df79a30e30c6632c3",
"body": "Let a tenant declare data volumes on its Tenant CR\n(spec.initResources.volumes[]) that are ensured to exist for workloads to\nmount by name — no separate provisioning step. Wired end-to-end across\nSystem, Platform, and Lite.\n\n- apis: add VolumeSpec (name/size/storageClass/accessModes/description/host\n[…]\nmes[]; echoed back on the tenant view.\n\nRegenerated cluster-manager, platform, and axisml-lite OpenAPI specs and the\ntyped client.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: support tenant-level predefined volumes (#97)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-12T01:17:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9fd1095c0386e121ed9d8be4333892c16e07acea",
"body": "Workspaces mount durable storage the same way a Run/Service does — by\nreferencing an existing data volume as a PVC in the role template — but\nBuildWorkspaceInput dropped req.Volumes entirely, so a workspace never got\nits volume. Wire it up and align the DTO to the design (backend.md §4.4):\nworkspace\n[…]\nlient.\n\nCovered by svcutil unit tests (inject + project) and an httptest integration\nasserting compute receives the PVC reference.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform): mount existing data volumes into workspaces (#96)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-11T20:22:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2663cf04449287f4b1e5dce5a12c281c4311b880",
"body": "* fix(build): flatten json:\",inline\" embeds in openapi-gen\n\nStructSchema only flattened anonymous struct fields with no json tag, so\nfields embedded via `json:\",inline\"` (e.g. corev1.Volume's VolumeSource,\ncorev1.ConfigMapEnvSource's LocalObjectReference) were emitted as a nested\nnamed property inst\n[…]\n -> trigger run -> assert compute received them).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: wire MLRun volume injection end-to-end (#95)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-11T14:37:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e95560a0a02b79a4bc534b1b7df0ec0d60eec881",
"body": "MLRun's PodTemplateSubset gains Volumes/VolumeMounts (parity with\nMLService), so a training run can mount a PVC-backed dataset volume.\nThe Lite/standalone runtime renders the mounts via a shared volumeMounts\nhelper, and ApplyMLRun ensures the backing volumes (idempotent). A\nPVC-backed volume maps to\n[…]\nmed volume are one and the same.\n\nRegenerate the composite OpenAPI specs (compute-service + axisml-core\nembed) for the new fields.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(mlrun): support volumes/volumeMounts in MLRun pod templates (#94)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-11T12:58:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d06bae0cd69ee0da583ab43e0e4680b9cc17c268",
"body": null,
"is_bot": false,
"headline": "feat(lite): expose axisml-core's OpenAPI contract through pkg/core (#93)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-10T21:08:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f55db4547949a7a644363e2671bc7d8d192b2eaf",
"body": "…coverage (#92)\n\n* test: add unit tests to raise coverage across layers\n\nAdd table-driven unit tests for pure-logic packages that had little or no\nunit coverage, targeting code not already exercised by the integration\n(envtest) suite: request/response projection and mapping, validation,\nerror transl\n[…]\nrrect\ncombined profile (7 -> 13 profiles merged).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test: raise unit coverage across layers; exclude generated code from …",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-09T16:01:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1c2ecad24912eac2470ad3c59a2ae5269e2e81a3",
"body": "…ice spec (#91)\n\nThe generated compute-service typed client had drifted from\naxisml-system/docs/apis/compute-service.yaml: the MLRun/MLService phase probes\nand batch-phase endpoints added in #88 were never regenerated into the platform\nclient. Regenerate it (make -C axisml-platform client-gen) so th\n[…]\nerator reordering. Platform\nbackend builds, vets and unit-tests clean; platform.yaml and the clustermanager\nclient are unaffected.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(platform): regenerate computeservice client to match compute-serv…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-09T04:02:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "65b47d99c81694406d97244a8c9dc9c301db06dd",
"body": "…apis module (#90)\n\nMove the five system CRD types (MLRun, MLService, MLTrafficPolicy, Tenant,\nResourcePool — all Group axisml.io/v1alpha1) out of the operators that reconcile\nthem and into a dependency-light leaf module axisml-system/apis, one package per\nCRD (apis/{mlrun,mlservice,mltrafficpolicy,\n[…]\ntely not moved.\n\nOwner semantics (who reconciles / signs off a CR) live in the design docs, not\nin where the types physically sit.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(system): consolidate CRD Go types into shared axisml-system/…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-09T03:21:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "aa25b5b47d0772975cc8ecaaabf97a91c51aabcc",
"body": "…iness form (#89)\n\n* feat(system): support direct min/max tenant quotas alongside unit business form\n\ncluster-manager now accepts a tenant pool quota in either the units\nbusiness form (`unit × quantity`) or a direct `quota: {min, max}` input;\nboth compile to the canonical `Tenant.spec.quotas[].min/m\n[…]\nconversion for SetQuota Quota (staticcheck S1016)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(system): support direct min/max tenant quotas alongside unit bus…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-08T16:11:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "58e21403a8df0700927bf082b6514d3cc0b4e02c",
"body": "…nts (#88)\n\nAdd lightweight, high-frequency phase probes to compute-service that skip\nthe heavy spec sub-tree the full MLRun/MLService payloads carry:\n\n- Single: GET /namespaces/{ns}/mlruns/{mlrun}/phase and\n /mlservices/{svc}/phase — projects only phase + status detail (MLService\n also carries ge\n[…]\nocs/apis/compute-service.yaml and, since pkg/apidoc is\nshared with axisml-core, the merged axisml-lite/docs/apis/axisml-core.yaml.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(system): add MLRun/MLService phase probes and batch phase endpoi…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-07T18:11:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cc7ab76f7d324881d78071c4afac6b2bb967d273",
"body": "… digests (#87)\n\nUnify the artifact-hub HTTP API into a single /artifacts resource (kind → body; addressing → (namespace,name,version)); pin OCI resolve to digest; add opt-in server-side dataset digest verification against S3 (RustFS); document deferred scoped-cred/event-finalize prerequisites. Includes the two code-review fixes (external-resolve digest guard, S3 access_key required-when-enabled) and review cleanups (ociBacked base, dead-code + comment fixes).",
"is_bot": false,
"headline": "feat(system): unify artifact-hub API to /artifacts and verify dataset…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-07T14:17:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a5dcbdd0fa438a122a5ff7e34bdc2fbbec49561",
"body": "* refactor(system): trim unpopulated status.conditions[] and duplicate credential expiry\n\nRemove three categories of redundant / over-designed API fields surfaced by a\ncross-component audit, plus a metric-step reporting bug:\n\n- compute-service: drop MLRun/MLService/TrafficPolicy `status.conditions[]\n[…]\ns.ExpiresAt` instead (same value, single source).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(system): trim redundant/over-designed API fields (#86)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-06T07:24:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "30839dea52b6367669e3b0835343bcfbc9f14ac9",
"body": null,
"is_bot": false,
"headline": "docs: remove unused docs",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-06T04:51:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "339ac8031508c0d32225f080547f0ceea743237a",
"body": "* docs: add platform API gaps + System interface needs\n\nReference for wiring the unimplemented/degraded Platform APIs and the new compute-service / cluster-manager endpoints they depend on.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* feat(platform): implement traffic PAT\n[…]\nntegration suites green across all three modules.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: close Platform API gaps + add System metrics/usage endpoints (#85)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-06T04:48:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b821e5736575505585c608e6a3d1961626c4a20b",
"body": "…nused endpoints (#84)\n\nAudit of the platform frontend against the generated OpenAPI contract surfaced\nfour gap classes; this closes them end to end. Backend endpoints/fields are\ndeclared (spec only — unwired routes auto-return 501); the frontend consumes\nthe real SDK with mock fallback so VITE_USE_\n[…]\nnum sets.\n\nValidation: backend go build + openapi-gen/server tests; frontend tsc + eslint\n+ vite build; spec + client regenerated idempotently.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform): declare missing APIs, fix contract mismatches, wire u…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-04T16:21:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ca958fa06f530b0dc0f449fec581ea3fc10c74a0",
"body": "Audited each component's OpenAPI spec against the existing black-box suite\nand added tests closing the largest gaps:\n\n- compute-service: list + pagination, patch round-trip, events projection,\n MLService pod logs, traffic-policy rollback, capabilities/health\n- cluster-manager: ResourcePool + Resour\n[…]\nlidated with `ruff check` and `pytest --collect-only` (33 items, no\nimport/symbol errors); not yet run against a live environment.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test: fill black-box API coverage gaps across all four components (#83)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-04T06:15:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b825deec30970cd8890bd6daefa2379668adf8a5",
"body": "…ls module (#82)\n\naxisml-core is meant to be embedded by out-of-tree projects, but its two\ndoc-gen commands (openapi-gen, config-doc-gen) dragged pkg/openapigen and\npkg/configdoc into the library module's graph, so both had to be published\nand tagged for an external `go get` to resolve.\n\nMove both c\n[…]\ne Python tests/ black-box suite in #81) — the lite Makefile's\nvet/e2e-test targets, its README, and the two top-level design docs.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(lite): move axisml-core doc-gen commands into a dev-only too…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-04T00:21:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6b80bc39df8c45f855da3bf6174a9ea7d8192f86",
"body": "Surface the previously-private engine composition as a public\nApp.RegisterRoutes(gin.IRouter): an external host mounts the full\naxisml-core API onto its own *gin.Engine (or a prefix group) and adds\nits own routes alongside, with axisml-core's middleware chain scoped to\na child group so it never wrap\n[…]\n update the lite\nMakefile, README and design doc to document the native-gin embedding\ncontract and the external-consumption model.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(lite): make axisml-core embeddable in an external gin server",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-03T15:23:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "84cfe148ad8114333e696045e7d4c5cc9a9b40b5",
"body": "Replace the Go test/e2e suite with the centralized Python pytest suite under\ntests/ (per-component API tests + Playwright UI e2e), and make the Lite form a\nfirst-class target for it:\n\n- infra(lite): add axisml-platform (API + SPA) and zot to the default Docker\n Compose stack. The platform needs a s\n[…]\ns for the tests/\n layout.\n\nValidated on a live Lite stack: `uv run pytest --mode lite` -> 14 passed,\n6 skipped (all multiTenant).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: black-box test suite + Lite Platform/UI, shared across forms (#81)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-07-01T18:06:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "259a81b2f0fcbf28a607ef60cf7b3191810c47a9",
"body": "…strap admin) (#80)\n\n* fix(infra): make self-built axisml-scheduler boot and become Ready\n\nFour separate defects kept the #79 self-built scheduler from coming up on a\nfresh cluster:\n\n- cmd/scheduler/main.go was missing the blank import of\n sigs.k8s.io/scheduler-plugins/apis/config/scheme, so Cosche\n[…]\nreports mustChangePassword, rotate via /users/{id}/password and\n re-login.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: bring up Standard + Lite e2e (scheduler boot, image builds, boot…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-30T15:19:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "587fa5544d92dc430dedad34ad142d31c73b010a",
"body": "* feat(infra): replace Koordinator with self-built axisml-scheduler\n\nReplace the Koordinator dependency with a self-built batch scheduler and\nrationalize the AxisML label namespace into domain-prefixed keys.\n\naxisml-scheduler (new component under axisml-infra/axisml-scheduler):\n- scheduler-framework\n[…]\neduler) joins\n COVERAGE_COMPONENTS so its coverage merges into the report.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(infra): replace Koordinator with self-built axisml-scheduler (#79)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-30T11:54:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "81390a95b53a2683e1f21dbbc233252e099f009e",
"body": "…s/ (#78)\n\nRelocate the axisml-core embedding example out of the core Go module\n(axisml-core/examples/embed/) into a standalone project at\naxisml-lite/examples/, with its own go.mod pinned at the local\ncheckout via replace directives. Keeps test-only example wiring out of\nthe core module while still\n[…]\nin-repo source.\n\nAdd axisml-lite/examples/Makefile and wire its fmt target into the\nlayer Makefile; extend lite fmt to cover pkg/.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(lite): move embed example to standalone module under example…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-29T03:52:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6c5adfca3e1d3aece0f42852168fe4f8f1a746f1",
"body": "The module paths used a flat `github.com/axisml/axisml/components/<name>`\nprefix that pointed at a directory which does not exist. Go tooling\n(go get, module proxy, and path-deriving code such as the OpenAPI\npackageNamer) assumes module path == repo path + subdirectory, so the\nmismatch was incorrect\n[…]\nageNamer), the axisml-system Makefile module template, and stale\npath comments. Generated OpenAPI specs are unchanged (schema names\npreserved).\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(repo): fix Go module paths to mirror on-disk layout (#77)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-29T01:20:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0dedce9b9d24261ffb10862055523e9900e061ff",
"body": "…oc with code (#76)\n\n* refactor(lite): remove unused StateDir/RuntimeDir scratch-dir plumbing\n\naxisml-core carried a managed scratch directory (StateDir →\ndocker.Config.RuntimeDir, default /var/lib/axisml/runtime) that was\nplumbed end-to-end but never read by any runtime code path. Everything\nthat p\n[…]\nonfigured\nvia the Compose environment block per scripts/gen-config-doc.sh).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(lite): drop dead StateDir plumbing & reconcile Lite design d…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T15:12:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "63c253b9be48adde0e1251ff04504a0a11245731",
"body": "… (#74)\n\nA full-implementation review of every component surfaced one Critical and\neight High issues spanning the system, platform, and lite layers. This fixes\nall of them, each with a focused, altitude-appropriate change and unit tests\nwhere a regression guard was warranted.\n\ncluster-manager (Criti\n[…]\n build/test/vet green across all seven Go modules, gofmt clean,\nfrontend tsc clean, platform doc-test passes with the generated spec unchanged.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: resolve Critical and High code-review findings across all layers…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T14:48:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4af9a6480ffa242c631d88ecfc7454affb44f469",
"body": "…alone runtime\" (#75)\n\n\"Docker runtime\" collides with the established meaning of a container\nruntime (containerd/runc). Rename the Lite ComputeRuntime concept to\n\"Standalone runtime\", which names it by deployment form (single-host)\nrather than by engine.\n\n- Move package internal/runtime/docker → int\n[…]\nhis also completes a\nhalf-done migration: the event reporter already emitted\n\"axisml-standalone-runtime\" and e2e already asserted \"standalone\".\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(lite): rename Lite compute runtime \"Docker runtime\" → \"Stand…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T14:40:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "73265f773b560d3eb38b0b7b847f1b533dfd9ae2",
"body": "…s:8082 (#73)\n\n* feat(system): unify service ports to http:8080/metrics:8081/probes:8082\n\nAlign listener ports across all HTTP-serving components onto a single\nscheme so scrape configs, NetworkPolicies, and probes are uniform:\nhttp :8080, Prometheus metrics :8081, health probes :8082.\n\n- platform/ba\n[…]\nI lint typechecks every\nmodule and was failing on the missing go.sum entry.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(system): unify service ports to http:8080 / metrics:8081 / probe…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T13:08:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b9638fb970a039b3a3386da7f509422eb7f8241a",
"body": "* feat(platform): serve frontend from the backend in a single image\n\nThe Platform backend now serves the frontend SPA itself, so the layer\nships as one image (ghcr.io/axisml/axisml-platform) instead of separate\nbackend + nginx frontend images. Same-origin means no CORS and no second\ngateway route.\n\n\n[…]\nobes on :8081\n (config/consts.go). Corrected to \"API :8080, Probes :8081\".\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform): serve frontend from the backend in a single image (#72)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T12:32:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5db878f45a9ebfadc2d20fb176335c296cbde997",
"body": null,
"is_bot": false,
"headline": "fix: remove unused docs",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T09:56:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b03bdc0bcdc229c7f002cda9f37d7437c18f8909",
"body": "Audit of every component's system_design doc against its actual code,\ngenerated API specs, Helm charts, and migrations. Default action was to\nupdate docs to match the code (code is the newer truth); a few clear code\nbugs were fixed instead, and the OpenAPI specs were regenerated.\n\nCode fixes:\n- tena\n[…]\nby the Koordinator subchart.\n- CLAUDE.md: frontend stack is shadcn/Radix, not AntD.\n\nAdds docs/design-code-gap-analysis.md as the audit record.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: reconcile design docs with implementation across all layers (#71)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T09:40:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "91247a2073618883380efa72be574562e16c6179",
"body": "Add a Playwright-based screenshot generator (scripts/gen-screenshots.sh +\nscripts/gen_screenshots.py) that boots the Platform frontend in mock mode\nand captures every route in both English and Chinese, writing PNGs to\ndocs/screenshots/{en,zh-CN}/.\n\nReplace the old flat docs/screenshots/*.png with th\n[…]\nets, point the README hero at the English dashboard, and add a\nfull Chinese translation (README.zh-CN.md) with cross-linked language\nswitchers.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add localized screenshots and Chinese README (#70)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T08:34:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cefadbb8e2c438ea61093191569704a9babd9ffc",
"body": "System-management feature for tenant-scoped durable data volumes (K8s PVCs),\nspanning design docs, prototype, and implementation across all layers.\n\ncluster-manager: extend the Volume REST primitive from create/delete to a full\nlifecycle — list / get (with live phase, capacity, and pod-scan mount oc\n[…]\nared useVolumeOptions hook); StorageClass is a live dropdown. In-browser mock\nfixtures + routes for debugging (VITE_USE_MOCK_API).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add data volume management (#69)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T07:36:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1de0ed5cf8bf30a2db9087d1e8cae4263bbcf36d",
"body": "The product is \"AxisML 训推平台\" — there is no \"控制台/Console\" form.\nReplace the brand string and standalone 控制台 wording across the\nfrontend (page title, i18n logout/suspend copy, login comment) and the\nproduct-design prototype (titles, shell copy). Rename the primary\nprototype artifact manifest axisml-console.html.artifact.json ->\naxisml-platform.html.artifact.json and its entry/identifier.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(platform): rename \"AxisML 控制台\" to \"AxisML 训推平台\" (#68)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T02:12:59Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9ec53dde4a50c27767f32df33e7d371867717429",
"body": "feat(platform): drive frontend mock fixtures from spec API examples",
"is_bot": false,
"headline": "Merge pull request #67 from AxisML/feat/api-docs-examples-mock",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T00:43:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb0d2eb2f9576fabbe970664d3bb131d5b2fbad5",
"body": "Make response-type examples fully populated rather than minimal, so the docs\nand frontend mock show realistic complete objects:\n- platform: Job/Tenant/Experiment/ArtifactDefinition annotations; Model/Image/\n ArtifactDefinition spec; RoleTemplate ports/volumes/volumeMounts; RunPolicy\n progressDeadl\n[…]\ne intentionally left\nout so each example stays internally consistent. Regenerated all five specs and\nthe frontend examples.gen.ts.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: flesh out response examples with optional/nested fields",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T00:36:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "81a522bf7a93256f034a8a9310c66e9b2e6643d2",
"body": "The example values carried Chinese display names / descriptions; switch them\nto English across every examples source (platform examples_*.go, the three\nsystem pkg/apidoc/examples.go) and the frontend mock data.ts, then regenerate\nall five specs and the frontend examples.gen.ts. Field/API descriptions were\nalready English. Generated System clients are unchanged (examples aren't\nemitted into them; descriptions unchanged).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: use English for all API spec examples and mock fixtures",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T00:11:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "273ddee0bfe096020b930f985b2bbcaf1dd40aec",
"body": "…clients\n\nFill the remaining example gaps found in an audit:\n- compute-service (MLRunList/MLServiceList/TrafficPolicyList/PodList/EventList)\n and artifact-hub (ArtifactList) build their list schemas via\n openapigen.ListEnvelope (g.Set), so registerExamples now runs AFTER those\n registrations and \n[…]\n's typed System clients (make client-gen):\n the new field descriptions propagate into the generated Go clients as doc\n comments.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(system): add list-envelope examples; regenerate platform System …",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-28T00:03:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3fdd00efbb3beee945fbd38a4730f17185b09ba9",
"body": "…specs\n\nExtend the same desc-tag + whole-object-example treatment to the remaining\ngenerated specs: cluster-manager, compute-service, artifact-hub, and the\naxisml-core (Lite) composite that folds the three.\n\n- `desc:\"...\"` tags on every serialized field across each service's\n internal/server DTOs (\n[…]\n) for cross-spec consistency.\n- Regenerated cluster-manager.yaml, compute-service.yaml, artifact-hub.yaml,\n and axisml-core.yaml.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(system): add field descriptions + examples to system & lite API …",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-27T23:19:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cb4b16afb9d884df7876fd9ebdb2ed0a7fc74b24",
"body": "Author API field descriptions and whole-object examples on the Go DTOs so\nthey flow into the generated OpenAPI spec, and generate the in-browser mock\nfixtures from those examples — the demo data can no longer drift from the\ncontract.\n\nopenapigen engine:\n- Schema.Example + Operation.Description field\n[…]\ntures from the examples (cloned for list\n variety); only contract-less helpers (pod logs, metrics, dashboard) stay\n synthesized.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform): drive frontend mock fixtures from spec API examples",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-27T22:58:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f8699bc38350e1b60a784d730a71bb3d079c39a2",
"body": "* refactor(lite): make axisml-core embeddable as a library\n\nPromote the axisml-core composition root from internal/core to pkg/core so\nan external module can import it, and split the all-in-one Run into a library\nAPI that lets a host mount the full HTTP surface on its own server.\n\n- pkg/core.New(ctx\n[…]\nlogs). The loops are\nowned by exactly one runner.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(lite): make axisml-core embeddable as a library (#66)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-27T22:13:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3d060ec9803fcaf82464046c73c9940238e11937",
"body": "… CR/native types (#65)\n\nSplit cluster-manager's monolithic pkg/extensions/extensions.go into one file\nper seam and rename the interfaces to their role:\n\n - resourcepool_provider.go: ResourcePoolStore -> ResourcePoolProvider\n - tenant_provider.go: TenantStore -> TenantProvider\n - volu\n[…]\nreads only ObjectMeta. The\nwire DTOs (Volume, CreateVolumeRequest) are unchanged, so the generated\nOpenAPI spec is byte-identical.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(system): split extension seams into per-interface files; use…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-27T16:02:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9e4185d447ec0a58061669ab9c0627961b0e62ce",
"body": "…-provisioned volumes (#64)\n\nMake durable volumes a pre-provisioned cluster resource (like ResourcePool)\nowned by cluster-manager, instead of an on-demand PVC created by compute-service.\nPlatform pre-provisions a volume through cluster-manager's Volume REST and the\nworkload references it by mounting\n[…]\ntform backend, high-level)\ndescribe the target: Platform pre-provisions volumes via cluster-manager; compute\nonly references them.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(system): add cluster-manager Volume REST; compute references pre…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-27T15:31:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f7085869df98e20a538c3b013f2cc5fb501ba832",
"body": "* refactor(system): consolidate axisml-core extension seams into pkg/extensions\n\nGather the deployment-form-neutral contracts that AxisML Lite's axisml-core\nmust implement into each component's pkg/extensions package, so pkg/ publishes\nonly the injected contracts and nothing else.\n\n- compute-service\n[…]\ns now expand\nidentically through resource.Expand.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(system): consolidate extension seams into pkg/extensions (#63)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-27T12:06:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d7044a941b5c0cb5e671029b9529a383cab1b39c",
"body": "Platform bootstrap's importDefaultTenant discovers the built-in `default`\ntenant via cluster-manager and imports it into the tenants table. The\nintegration cluster-manager stub never seeded that tenant, so GetTenant\nreturned 404 and the import was skipped, leaving the tenant list with one\nrow and fa\n[…]\nre-seed the `default` Tenant in the stub before bootstrap, mirroring the\nSystem chart's seed.tenant ownership in real deployments.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(platform): seed default tenant in cluster-manager stub (#62)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-26T22:03:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2146a5644849051af1dcc0127cd919b3b5072f8a",
"body": "…ion scheme (#61)\n\n* docs(lite): split axisml-core/axisml-runtime into separate subprojects with HTTP ComputeRuntime\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n* docs(lite): merge axisml-runtime into axisml-core as in-process runtime\n\nFold the standalone Runtime back into\n[…]\nle newline\n in gen-config-doc.sh and regenerate.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(lite): single-host AxisML Lite form + unified AXISML_ configurat…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-26T21:27:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3aaf7f4e1cac1ef7dca5d8d5bc3a72b43d264913",
"body": "The Lite Standalone composition binary reused the axisml-system name,\ncolliding with the axisml-system/ monorepo layer directory. Rename the\nbinary semantic to axisml-core (platform / core / runtime three-process\nmodel); keep all references to the axisml-system/ layer path intact.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(lite): rename merged Standalone binary axisml-system → axisml-core",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-24T03:56:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "207a027766e36e7d6e9766e2b7cad8b92ff2135d",
"body": "* test: drive e2e suite through generated OpenAPI clients\n\nThe centralized e2e suite hand-rolled every System service's HTTP\nrequest/response types in dto_test.go and sent untyped map[string]any\nbodies to the Platform backend — a contract drift that only surfaced at\nrun time as a JSON mismatch.\n\nGen\n[…]\nthey fire only after the\nwhole journey completes.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test: drive e2e suite through generated OpenAPI clients (#60)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-24T02:37:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b746c5658989f55020cfc46f966157d2378652e4",
"body": null,
"is_bot": false,
"headline": "docs: Rename docs",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-23T21:39:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "98cb8fa834a16faef76bee641b34b4237f3f1ca9",
"body": "* refactor(repo): reorganize monorepo by deployment layer\n\nPromote the deployment layer to the top-level organizing axis. Each layer\ndir is now self-contained — its components, Helm chart, design docs, and\ngenerated API specs:\n\n axisml-platform/ backend/ frontend/ deploy/helm/ docs/ docs/apis/\n a\n[…]\nREADME to each layer dir (infra/system/platform).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(repo): reorganize monorepo by deployment layer (#59)",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-23T21:33:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c8fecfa6e6097a25dc011384ae3d2ae6049b9301",
"body": "…ule assembly (#58)\n\nMain-repo enablement for AxisML Lite (design §9 phases 1-2): publish the\ndeployment-form-neutral ComputeRuntime contract + pkg/statusmap mapping, and a\nmanager-free pkg/module assembly API for compute-service, cluster-manager and\nartifact-hub. Behavior-preserving; compute-operator untouched. Verified at\nunit + integration + e2e.",
"is_bot": false,
"headline": "feat(system): publish Compute Runtime contract + form-neutral pkg/mod…",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-23T13:24:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42451d2c317a00d6412d5767ae7ad159452374ad",
"body": null,
"is_bot": false,
"headline": "docs: add community health files and issue/PR templates",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T16:17:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c6318591da5df3f21e69c94927674a3e7bb4694e",
"body": "# Conflicts:\n#\tdocs/product_design/prd.md\n#\tdocs/system_design/platform/frontend.md\n#\tdocs/system_design/platform/overview.md",
"is_bot": false,
"headline": "Merge branch 'main' of https://github.com/AxisML/axisml",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T15:48:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbedcd678c611c3ef7557f42c36c4ab64efc27b4",
"body": "feat(platform): implement platform frontend and platform backend",
"is_bot": false,
"headline": "Merge pull request #56 from AxisML/feat/platform-impl",
"author_name": "Zhenlong Huang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T15:46:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9dbf2f353753736bcd8034f0bf74d034360f0a9a",
"body": "- platform-backend: stop leaking internal error/panic causes in RFC 7807\n problem responses; log the suppressed 5xx cause server-side keyed by\n requestID instead.\n- platform-backend: route log-follow/SSE pod-log streams through a separate\n compute client without an overall http.Client timeout (wa\n[…]\nconn.Close() return in leader election (errcheck lint).\n- e2e: stop the lazily-started platform port-forward in TestMain teardown.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(platform): address PR review findings",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T15:41:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "64be28d2a0bd9e8d230eb60c629caacc5825dd13",
"body": "Recaptured all 10 platform-frontend page screenshots against the\nin-browser mock API (VITE_USE_MOCK_API), at 1440px logical width.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(screenshots): refresh frontend screenshots from mock UI",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T15:23:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "100a3619a226f66c45ac189716bb6dc028f83f30",
"body": "… election\n\nThe GC worker now elects via a Postgres advisory lock, so the K8s\nLease id is no longer used.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(helm): drop artifact-hub leaderElection.id for PG advisory-lock…",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T14:57:06Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "32ba4e3eaea4d049bdb0f434b99cb43f7c38b859",
"body": "Pull recurring UI into shared components (asset-card, back-link,\ndescriptions, form-drawer, filter-select, search-input, mono-chip,\npage-state, code-block, timeline, pod-log-pane, canary-rollout,\nexp-drawer, workspace-brand) and lib helpers (format, phase, run-spec,\nuse-pod-logs), then refactor list/detail pages to consume them. Refresh\ni18n strings across features to match.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(platform-frontend): extract shared primitives and rework pages",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T14:56:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "de387b7e807bde5bfe3191484ed454b1f127c8ec",
"body": "…visory-lock election\n\nartifact-hub watches no CRDs and treats Postgres as its sole source of\ntruth; its only tie to the Kubernetes API was the GC worker's leader-\nelection Lease. Replace that with a Postgres session-level advisory lock\nso the service no longer links client-go / controller-runtime, \n[…]\nete leader-election Role/RoleBinding; drop Lease env vars\n- docs: artifact-hub.md / deployment.md describe the advisory-lock model\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(artifact-hub): drop K8s Lease + controller-runtime for PG ad…",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T08:02:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fd9f78ba7a7daa2a24d79f96d60c669546351f68",
"body": "…version drawer\n\nMove the search/filter toolbars above the table card on experiments, jobs,\nservices, traffic, and workspaces pages so filters read as page controls\nrather than card chrome. Restyle the image/model version drawer from filled\nstatus badges to a dot + label indicator (matching the prot\n[…]\n/createdAt\nmoved to a trailing meta line. Give the workspace view toggle the outline\nvariant and shorten the workspace stop label.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(platform-frontend): lift list filters out of cards, restyle …",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T06:53:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ee4f7457c389b2c780412fc8345ee34d7f178f8d",
"body": "…rd trend\n\n- Unify model/image/workspace cards: bordered icon tile, tag chip row,\n separator footer, hover border/shadow; widen to md breakpoint\n- Workspaces: brand launch marks (Jupyter/VSCode/PyTorch) + terminal,\n CPU unit chip, aria-labels on icon actions\n- Traffic: switch canary split to Slider with live %, drop promote/rollback\n- Dashboard trend: collapse to a single percentage Y axis\n- Sync i18n strings for the above\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(platform-frontend): polish cards, traffic split, and dashboa…",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T06:34:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d5505bf4a3f27e2e07eb6f15893b73bdf60baf23",
"body": "…bulary\n\nAlign the UI with docs/product_design/prototype and shadcn best practices:\n\n- Tabs: make underline (line) the default variant so every tab matches the\n prototype; drop redundant variant props and pill-style detail tabs;\n standardize content spacing (mt-4 detail, pt-4 drawer).\n- Forms: wra\n[…]\n status-colored Progress.\n- LogViewer: keep the dark terminal but use named Tailwind palette utilities\n instead of hardcoded hex.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(platform-frontend): unify controls to consistent shadcn voca…",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T03:55:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "31c82c4cfdb9a4a74fb643e4e1c5e5ee93064c28",
"body": "Radix renders data-state=\"active|open|checked|…\"; map the bare\ndata-active/data-open/data-checked utilities the ui/ components rely on\nonto it so active tabs, open menus, and checked controls get state styling.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(platform-frontend): map Radix data-state to data-* variants",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T03:05:02Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2e4f9b456ede860ac110fd3c9eb20b180d6fd174",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: add shadcn MCP server scoped to platform-frontend",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T03:04:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "13b145bb74df701782b6c62925f4a6876ba3d3bf",
"body": "Rename all pages, custom components, and the app shell to kebab-case to\nmatch shadcn's own ui/ files (component exports stay PascalCase). Fold\nsrc/shell/ into src/components/layout/. Update all import paths and the\nREADME/CONVENTIONS docs, including a new file-naming rule.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(platform-frontend): standardize file naming to kebab-case",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T02:51:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ed965ac4b6c9b828e644dc60b6f38457df3f7a37",
"body": null,
"is_bot": false,
"headline": "chore: link shadcn skills",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T02:32:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5877ee4f3a14d4c79bcebb305ba92f8cdde4d2b3",
"body": "Switch the platform frontend's component library to shadcn/ui (Radix,\nradix-nova style) on Tailwind v4, applying the Geist visual skin from\nDESIGN.md while keeping the prototype as the authority for page structure,\nfields, and interactions. The data layer (generated SDK, react-query hooks,\nsession/s\n[…]\ngainst the live platform-backend (auth, tenant CRUD write path,\nall tenant-scoped list endpoints 200, honest metric placeholders).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform-frontend): migrate UI from Ant Design to shadcn/ui",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-22T02:20:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6cd4a812a52e8716fdd73ba4ac2041670ae4d421",
"body": null,
"is_bot": false,
"headline": "refactor: move ui to shadcn-ui",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T17:48:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbff857d7006e12cd54f2d967cb9e12b7a64c2f1",
"body": "Bring the platform UI to ~1:1 visual parity with docs/product_design/\nprototype across all list, detail, and form pages.\n\nShared components:\n- PhaseTag: prototype dot+label .status indicator (was AntD filled tags)\n- RunStrip: ✓/✗/spinner run-history dots for job/experiment lists\n- LogViewer: dark .l\n[…]\ncommand/env, cluster metrics,\nquota usage — all gated behind VITE_USE_MOCK_API so the real app keeps\nits honest empty/zero states.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform-frontend): replicate product prototype 1:1 (mock mode)",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T17:41:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e84ae93a558c4a0d246b72c679784d3de576f375",
"body": "…_API\n\nSet VITE_USE_MOCK_API=true to serve the whole app from fixtures so the\nfrontend never contacts the backend — useful when the backend has no data\nor isn't running. Implemented as a custom `fetch` injected into the generated\n@hey-api/client-fetch client, so all SDK functions, interceptors, URL \n[…]\nsession). Verified\nend-to-end in a browser: login, dashboard, and nested detail pages render\nwith zero xhr/fetch network requests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform-frontend): add in-browser mock API behind VITE_USE_MOCK…",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T14:03:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ffb123e20bc6a6e930027d5802d978e1eaabcf77",
"body": "The backend generated an ephemeral RS256 key per pod when JWT_PRIVATE_KEY_PEM was\nunset, so every login session was invalidated on each restart (and JWKS diverged\nacross replicas). Add a chart-managed key Secret — generate-once and reuse via\n`lookup` so `helm upgrade` doesn't rotate it, or reference\n[…]\nd wire JWT_PRIVATE_KEY_PEM + JWT_KEY_ID into the serve container.\nTokens now survive restarts and stay consistent across replicas.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(platform): persist platform-backend JWT signing key",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T12:46:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f177b0e80779fa81db3c28f3579850c48f15bfb4",
"body": "Replace the verbatim-HTML prototype port with the engineering architecture in\ndocs/system_design/platform/frontend.md: Ant Design v6 components, Tailwind\nutilities over shared design tokens, and react-i18next (zh-CN / en-US).\n\n- ConfigProvider injects the red dust brand theme + light/dark/system alg\n[…]\night-side drawer close, text-link row actions.\n- Routes code-split via React.lazy; delete legacy app.css + hand-rolled components.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform-frontend): rebuild UI on Ant Design + Tailwind + i18n",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T12:44:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b32e7aa5283d1e9e6e13dfe2c7c7e652fbd8af44",
"body": "Backend — add best-effort live counts to the Tenant contract and populate\nthem from compute-service:\n- memberCount (RoleRepo.CountByTenant), activeJobRuns / activeExperimentRuns\n (ListMLRuns active-phase + axisml.io/{job,experiment} label split),\n onlineServices (ListMLServices kind=service).\n- ge\n[…]\nquota table.\n- Tenants: 资源配额 column is multi-row (pool + 用量/水位 meter); added\n 成员 / 活跃任务 / 在线服务 columns from the enriched payload.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform): wire dashboard overview + tenant workload roll-ups",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T08:36:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6aff3604d6d90fcddf76f3c7cacc0129413a2b2d",
"body": "Replace the Vercel-derived brand notes with a structured, enterprise-focused\ndesign-system spec (color, typography, spacing, components) for the console UI.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: rewrite DESIGN.md as Ant-inspired design system",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T07:58:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "238067c30c7d28b7b524ae4ba63c4669b7aec099",
"body": "…EADME\n\nCapture full-page previews of all 10 top-level prototype submenus into\ndocs/screenshots/ and embed the dashboard shot in the README intro.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(prototype): add console submenu screenshots, embed homepage in R…",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T07:56:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "473bf714d1613454e4fcb1a4edd8d8c939984c1d",
"body": "Role is fixed to the session default; the top-right 角色 picker and its\ndropdown are dropped from renderTopbar (wiring is null-guarded, no-op).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(prototype): remove demo role switcher from topbar",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T07:56:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "8906e9505bfa34022099ffcadd8b94df94480e38",
"body": "…to tenants page\n\n- Dashboard: 5 KPI cards (工作区/实验/自定义任务/在线服务/资产) with run·queue\n breakdowns and unified focal styling; cluster usage split into 全部 + per-pool\n tabs; drop quick-entry panel and \"全部\" link on recent activity.\n- Tenants: merge quota water-level into the management list — 资源配额 column\n now multi-row (pool + usage/水位 meter) plus 活跃任务/在线服务 columns.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(prototype): redesign dashboard overview, move tenant management …",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T07:40:34Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "b27067d01f940b828896fb7aa1de0af0ae6244f9",
"body": "…fallback)\n\nThe active tenant now travels in the `axisml.tenant` cookie instead of the\nX-Axisml-Tenant request header.\n\n- backend: ActiveTenant reads the cookie first, falling back to the header\n (for CLI / e2e / service-to-service callers).\n- openapi-gen: X-Axisml-Tenant is now an optional paramet\n[…]\ns priority over the header. Browser requests now carry\n`axisml.tenant` and no X-Axisml-Tenant header. tsc/eslint/vite build green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform): carry active tenant via cookie (cookie-first, header …",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T07:16:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ffacedf807d4134bcf37d4a9d1b8d5f1d90adcef",
"body": "…, real data, writes)\n\nBring the platform-frontend SPA from a demo shell to a live client of the\nreal platform-backend.\n\n- Auth: add Login page + route gate + session (JWT login/logout, /auth/me\n hydration, role derived from isSystemAdmin/tenantRoles). Attach the bearer\n via a request interceptor \n[…]\nall tenants.\n\ntsc, eslint, and vite build all pass. Detail-page write actions and their\ndemo read-content remain a follow-up pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform): wire frontend↔backend integration (auth, tenant scope…",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T06:28:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4943b8f516349564b3ff6fcf1880e3d5f773a9f9",
"body": "Every authenticated request did 2-3 PostgreSQL reads before the handler:\nsession-validity (IsActive) plus identity/RBAC load (user row + bindings).\nFront both with Redis, deployed in axisml-infra.\n\nRedis is an optional accelerator, never a source of truth: an empty\nREDIS_ADDR yields a noop cache (id\n[…]\n a redis password Secret.\n- Design docs updated in place (infra overview/storage, platform auth/\n backend, deployment, database).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(platform): cache the auth hot path with optional Redis",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T06:25:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "94919c408262a936b6fa7dee05ada440bac37b6e",
"body": "The e2e bring-up findings have all been fixed or encoded into the suite; the\njourney notes no longer serve a purpose now that the full suite passes.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(e2e): remove FINDINGS.md bring-up notes",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T02:19:41Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "50700e191668c9bca723108cd4d68d4a4b3e8d54",
"body": "…ovision\n\nThe e2e workload suite surfaced a real product bug: cluster-manager's tenant\nCreate only copied caller-supplied labels and never set the\n`axisml.io/tenant-id` orphan-anchor label that tenant-operator requires before\nit will provision a tenant's namespace + ElasticQuota. As a result *every*\n[…]\nrst\nversion — edit in place rather than ship a 0002).\n\nFull e2e suite is green end-to-end (41/41) against a live minikube cluster.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(cluster-manager): auto-stamp tenant-id so REST-created tenants pr…",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T02:19:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8021eb2a0f053711811d4fb5ac4879de79675648",
"body": "The platform chart labeled its sole component `platform`, so the\n`{{ fullname }}-<component>` convention produced the doubled\n`axisml-platform-platform`. The component is actually the backend\n(Deployment runs `serve`, image axisml-platform-backend), making the\nchart multi-component like axisml-syste\n[…]\n for a future `axisml-platform-frontend`, and keeps fullname\noverridable via values. Update the e2e platform svc default to match.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(platform): name backend resources axisml-platform-backend",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-21T01:56:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9c1a5b8bc054f91c0f8e5d44d8af48e4255cb5d6",
"body": "…sses live\n\nTwo fixes surfaced by bringing the Platform up on a real cluster and running the\ne2e suite:\n\n- db: Platform shares the `axisml` database with compute-service / artifact-hub;\n it must track migrations in its own table (platform_schema_migrations) instead\n of the default schema_migration\n[…]\ne\nminikube cluster (auth, resource pools, tenant+quota+member lifecycle via\ncluster-manager/tenant-operator, job-definition CRUD).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(platform): isolate migration table + RunPolicy validation; e2e pa…",
"author_name": "zhenlohuang",
"author_login": "zhenlohuang",
"committed_at": "2026-06-20T22:27:46Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 0,
"commits_last_year": 355,
"latest_release_at": null,
"latest_release_tag": null,
"releases_from_tags": false,
"days_since_last_push": 3,
"active_weeks_last_year": 14,
"days_since_latest_release": null,
"mean_days_between_releases": null
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": false,
"has_contributing": true,
"health_percentage": 75,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "github.com/axisml/axisml/axisml-system/apis",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/axisml/axisml/axisml-system/apis",
"is_deprecated": false,
"latest_version": "v0.0.2",
"repository_url": "https://github.com/axisml/axisml",
"versions_count": 2,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-19T03:12:33Z",
"latest_version_yanked": null,
"days_since_latest_publish": 3
},
{
"name": "github.com/axisml/axisml/axisml-system/artifact-hub",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/axisml/axisml/axisml-system/artifact-hub",
"is_deprecated": false,
"latest_version": "v0.0.2",
"repository_url": "https://github.com/axisml/axisml",
"versions_count": 2,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-19T03:12:33Z",
"latest_version_yanked": null,
"days_since_latest_publish": 3
},
{
"name": "github.com/axisml/axisml/axisml-system/cluster-manager",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/axisml/axisml/axisml-system/cluster-manager",
"is_deprecated": false,
"latest_version": "v0.0.2",
"repository_url": "https://github.com/axisml/axisml",
"versions_count": 2,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-19T03:12:33Z",
"latest_version_yanked": null,
"days_since_latest_publish": 3
}
]
},
"popularity": {
"forks": 0,
"stars": 1,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [
{
"date": "2026-07-01",
"count": 1
}
],
"complete": true,
"collected": 1,
"total_stars": 1
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": true,
"bootstrap_files": [
"Makefile",
"axisml-infra/Makefile",
"axisml-platform/Makefile",
"axisml-system/Makefile",
"tests/Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"axisml-platform/frontend/tsconfig.json"
],
"toolchain_manifests": [
"axisml-infra/axisml-scheduler/go.mod",
"axisml-platform/backend/go.mod",
"axisml-platform/backend/test/integration/go.mod",
"axisml-system/apis/go.mod",
"axisml-system/artifact-hub/go.mod",
"axisml-system/artifact-hub/pkg/apidoc/go.mod",
"axisml-system/artifact-hub/test/integration/go.mod",
"axisml-system/cluster-manager/go.mod",
"axisml-system/cluster-manager/pkg/apidoc/go.mod",
"axisml-system/cluster-manager/test/integration/go.mod",
"axisml-system/compute-operator/go.mod",
"axisml-system/compute-operator/test/integration/go.mod",
"axisml-system/compute-service/go.mod",
"axisml-system/compute-service/pkg/apidoc/go.mod",
"axisml-system/compute-service/test/integration/go.mod",
"axisml-system/tenant-operator/go.mod",
"axisml-system/tenant-operator/test/integration/go.mod",
"axisml-system/test/testutil/go.mod",
"pkg/axismlconfig/go.mod",
"pkg/configdoc/go.mod",
"pkg/openapigen/go.mod"
],
"largest_source_bytes": 88919,
"source_files_sampled": 1459,
"oversized_source_files": 1,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 21656
},
"dependencies": {
"manifests": [
"tests/pyproject.toml"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"pypi"
],
"dependencies": [
{
"name": "k8s.io/api",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v0.34.7"
},
{
"name": "k8s.io/apimachinery",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v0.34.7"
},
{
"name": "k8s.io/client-go",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v0.34.7"
},
{
"name": "k8s.io/component-base",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v0.34.7"
},
{
"name": "k8s.io/component-helpers",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v0.34.7"
},
{
"name": "k8s.io/klog/v2",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v2.130.1"
},
{
"name": "k8s.io/kube-scheduler",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v0.34.7"
},
{
"name": "k8s.io/kubernetes",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v1.34.7"
},
{
"name": "sigs.k8s.io/controller-runtime",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v0.22.3"
},
{
"name": "sigs.k8s.io/scheduler-plugins",
"manifest": "axisml-infra/axisml-scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v0.34.7"
},
{
"name": "github.com/axisml/axisml/pkg/openapigen",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0"
},
{
"name": "github.com/gin-gonic/gin",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.1"
},
{
"name": "github.com/go-playground/validator/v10",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v10.30.1"
},
{
"name": "github.com/golang-jwt/jwt/v5",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v5.2.1"
},
{
"name": "github.com/golang-migrate/migrate/v4",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v4.18.1"
},
{
"name": "github.com/google/uuid",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/oapi-codegen/runtime",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.2"
},
{
"name": "github.com/prometheus/client_golang",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v1.23.2"
},
{
"name": "github.com/redis/go-redis/v9",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v9.7.3"
},
{
"name": "github.com/spf13/cobra",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.2"
},
{
"name": "github.com/stretchr/testify",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "golang.org/x/crypto",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v0.48.0"
},
{
"name": "gorm.io/driver/postgres",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.11"
},
{
"name": "gorm.io/gorm",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v1.25.12"
},
{
"name": "github.com/axisml/axisml/pkg/axismlconfig",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0"
},
{
"name": "github.com/axisml/axisml/pkg/configdoc",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0"
},
{
"name": "golang.org/x/sync",
"manifest": "axisml-platform/backend/go.mod",
"ecosystem": "go",
"version_constraint": "v0.19.0"
},
{
"name": "@fontsource-variable/geist",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^5.2.9"
},
{
"name": "@hey-api/client-fetch",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^0.10.0"
},
{
"name": "@hookform/resolvers",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^5.4.0"
},
{
"name": "@tanstack/react-query",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^5.62.0"
},
{
"name": "@tanstack/react-table",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^8.21.3"
},
{
"name": "class-variance-authority",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^0.7.1"
},
{
"name": "clsx",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^2.1.1"
},
{
"name": "cmdk",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.1"
},
{
"name": "dayjs",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^1.11.21"
},
{
"name": "i18next",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^26.3.1"
},
{
"name": "lucide-react",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^1.21.0"
},
{
"name": "next-themes",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^0.4.6"
},
{
"name": "radix-ui",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^1.6.0"
},
{
"name": "react",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^19.0.0"
},
{
"name": "react-dom",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^19.0.0"
},
{
"name": "react-hook-form",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^7.80.0"
},
{
"name": "react-i18next",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^17.0.8"
},
{
"name": "react-router-dom",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^7.1.0"
},
{
"name": "recharts",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^3.8.0"
},
{
"name": "shadcn",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^4.11.0"
},
{
"name": "sonner",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^2.0.7"
},
{
"name": "tailwind-merge",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^3.6.0"
},
{
"name": "tw-animate-css",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^1.4.0"
},
{
"name": "zod",
"manifest": "axisml-platform/frontend/package.json",
"ecosystem": "npm",
"version_constraint": "^4.4.3"
},
{
"name": "k8s.io/api",
"manifest": "axisml-system/apis/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/apimachinery",
"manifest": "axisml-system/apis/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "github.com/gin-gonic/gin",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.12.0"
},
{
"name": "github.com/go-logr/logr",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.3"
},
{
"name": "github.com/go-logr/zapr",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.0"
},
{
"name": "github.com/go-playground/validator/v10",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v10.30.2"
},
{
"name": "github.com/go-viper/mapstructure/v2",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v2.5.0"
},
{
"name": "github.com/golang-migrate/migrate/v4",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v4.19.1"
},
{
"name": "github.com/google/uuid",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/jackc/pgx/v5",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v5.6.0"
},
{
"name": "github.com/minio/minio-go/v7",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v7.2.1"
},
{
"name": "github.com/prometheus/client_golang",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.23.2"
},
{
"name": "github.com/spf13/cobra",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.2"
},
{
"name": "github.com/spf13/viper",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.20.1"
},
{
"name": "github.com/stretchr/testify",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "go.uber.org/zap",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.27.1"
},
{
"name": "golang.org/x/sync",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v0.20.0"
},
{
"name": "gorm.io/datatypes",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.2.7"
},
{
"name": "gorm.io/driver/postgres",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "gorm.io/gorm",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v1.31.1"
},
{
"name": "k8s.io/apimachinery",
"manifest": "axisml-system/artifact-hub/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "github.com/gin-gonic/gin",
"manifest": "axisml-system/cluster-manager/go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.0"
},
{
"name": "github.com/prometheus/client_golang",
"manifest": "axisml-system/cluster-manager/go.mod",
"ecosystem": "go",
"version_constraint": "v1.23.2"
},
{
"name": "github.com/prometheus/common",
"manifest": "axisml-system/cluster-manager/go.mod",
"ecosystem": "go",
"version_constraint": "v0.67.5"
},
{
"name": "github.com/stretchr/testify",
"manifest": "axisml-system/cluster-manager/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "k8s.io/api",
"manifest": "axisml-system/cluster-manager/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/apimachinery",
"manifest": "axisml-system/cluster-manager/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/client-go",
"manifest": "axisml-system/cluster-manager/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "sigs.k8s.io/controller-runtime",
"manifest": "axisml-system/cluster-manager/go.mod",
"ecosystem": "go",
"version_constraint": "v0.24.0"
},
{
"name": "github.com/axisml/axisml/axisml-system/apis",
"manifest": "axisml-system/cluster-manager/go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.2"
},
{
"name": "github.com/stretchr/testify",
"manifest": "axisml-system/compute-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "k8s.io/api",
"manifest": "axisml-system/compute-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/apimachinery",
"manifest": "axisml-system/compute-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/client-go",
"manifest": "axisml-system/compute-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/klog/v2",
"manifest": "axisml-system/compute-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v2.140.0"
},
{
"name": "sigs.k8s.io/controller-runtime",
"manifest": "axisml-system/compute-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.24.0"
},
{
"name": "sigs.k8s.io/gateway-api",
"manifest": "axisml-system/compute-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.1"
},
{
"name": "github.com/axisml/axisml/axisml-system/apis",
"manifest": "axisml-system/compute-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0"
},
{
"name": "github.com/gin-gonic/gin",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.0"
},
{
"name": "github.com/go-logr/logr",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.4.3"
},
{
"name": "github.com/go-logr/zapr",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.3.0"
},
{
"name": "github.com/go-playground/validator/v10",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v10.22.1"
},
{
"name": "github.com/go-viper/mapstructure/v2",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v2.2.1"
},
{
"name": "github.com/golang-migrate/migrate/v4",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v4.18.1"
},
{
"name": "github.com/google/uuid",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/prometheus/client_golang",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.23.2"
},
{
"name": "github.com/spf13/cobra",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.2"
},
{
"name": "github.com/spf13/viper",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.20.1"
},
{
"name": "github.com/stretchr/testify",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "go.uber.org/zap",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.27.1"
},
{
"name": "gorm.io/datatypes",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.2.5"
},
{
"name": "gorm.io/driver/postgres",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.11"
},
{
"name": "gorm.io/gorm",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v1.25.12"
},
{
"name": "k8s.io/api",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/apimachinery",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/client-go",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "sigs.k8s.io/controller-runtime",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v0.24.0"
},
{
"name": "github.com/axisml/axisml/axisml-system/apis",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.2"
},
{
"name": "github.com/prometheus/common",
"manifest": "axisml-system/compute-service/go.mod",
"ecosystem": "go",
"version_constraint": "v0.67.5"
},
{
"name": "k8s.io/api",
"manifest": "axisml-system/tenant-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/apimachinery",
"manifest": "axisml-system/tenant-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/client-go",
"manifest": "axisml-system/tenant-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/klog/v2",
"manifest": "axisml-system/tenant-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v2.140.0"
},
{
"name": "sigs.k8s.io/controller-runtime",
"manifest": "axisml-system/tenant-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.24.0"
},
{
"name": "github.com/axisml/axisml/axisml-system/apis",
"manifest": "axisml-system/tenant-operator/go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0"
},
{
"name": "github.com/go-viper/mapstructure/v2",
"manifest": "pkg/axismlconfig/go.mod",
"ecosystem": "go",
"version_constraint": "v2.2.1"
},
{
"name": "github.com/spf13/viper",
"manifest": "pkg/axismlconfig/go.mod",
"ecosystem": "go",
"version_constraint": "v1.20.1"
},
{
"name": "github.com/axisml/axisml/pkg/axismlconfig",
"manifest": "pkg/configdoc/go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0"
},
{
"name": "github.com/google/uuid",
"manifest": "pkg/openapigen/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "k8s.io/api",
"manifest": "pkg/openapigen/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "k8s.io/apimachinery",
"manifest": "pkg/openapigen/go.mod",
"ecosystem": "go",
"version_constraint": "v0.36.0"
},
{
"name": "sigs.k8s.io/yaml",
"manifest": "pkg/openapigen/go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 114,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "zhenlohuang",
"commits": 355,
"avatar_url": "https://avatars.githubusercontent.com/u/2987182?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml"
],
"has_docs_dir": true,
"linter_configs": [
".golangci.yml",
"eslint.config.js"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": true
},
"security_signals": {
"lockfiles": [
"go.sum",
"pnpm-lock.yaml",
"uv.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 9,
"reason": "28 out of 29 merged PRs checked by a CI test -- score normalized to 9",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"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": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 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": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 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": 0,
"reason": "84 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "1d887dac9ff1d706b8f76d3d1647faeef9872b74",
"ran_at": "2026-07-22T06:45:00Z",
"aggregate_score": 5.3,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-19T03:20:11Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-19T03:12:34Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/AxisML/axisml",
"host": "github.com",
"name": "axisml",
"owner": "AxisML"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 53,
"inputs": {
"security": 53,
"vitality": 45,
"community": 43,
"governance": 49,
"engineering": 77
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "at_risk",
"name": "Vitality",
"value": 45,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 74,
"inputs": {
"commits_last_year": 355,
"human_commit_share": 1,
"days_since_last_push": 3,
"active_weeks_last_year": 14
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 3 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 3
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "14/52 weeks with commits",
"points": 9.7,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 14
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "355 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 355
}
}
],
"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": "critical",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"releases_count": 0
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "no releases published",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases_published",
"params": {}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 43,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 1,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "below_threshold"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "1 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 1
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (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
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 49,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 13,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"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 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 72,
"inputs": {
"merged_prs": 114,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "114/114 decided PRs merged",
"points": 38.2,
"status": "met",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 114,
"decided": 114
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 34,
"inputs": {
"followers": 0,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "AxisML",
"public_repos": 2,
"account_age_days": 96
},
"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": "0 followers of AxisML",
"points": 0,
"status": "missed",
"details": [
{
"code": "owner_followers",
"params": {
"count": 0,
"login": "AxisML"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "2 public repos, account ~0 yr old",
"points": 4,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 2
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"packages": [
"github.com/axisml/axisml/axisml-system/apis",
"github.com/axisml/axisml/axisml-system/artifact-hub",
"github.com/axisml/axisml/axisml-system/cluster-manager"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 3
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "3 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 3,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 3 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 3
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "2 published versions",
"points": 12,
"status": "partial",
"details": [
{
"code": "published_versions",
"params": {
"count": 2
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 77,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "excellent",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 92,
"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": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"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, eslint.config.js",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml, eslint.config.js"
}
}
],
"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": "28 out of 29 merged PRs checked by a CI test -- score normalized to 9",
"points": 18,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 53,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 53,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 5.3
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "28 out of 29 merged PRs checked by a CI test -- score normalized to 9",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"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": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "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 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "84 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 3
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 82,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 21656
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 100,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum",
"pnpm-lock.yaml",
"uv.lock"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [
"Makefile",
"axisml-infra/Makefile",
"axisml-platform/Makefile",
"axisml-system/Makefile",
"tests/Makefile"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"axisml-platform/frontend/tsconfig.json"
],
"agent_commit_share": 0.78,
"toolchain_manifests": [
"axisml-infra/axisml-scheduler/go.mod",
"axisml-platform/backend/go.mod",
"axisml-platform/backend/test/integration/go.mod",
"axisml-system/apis/go.mod",
"axisml-system/artifact-hub/go.mod",
"axisml-system/artifact-hub/pkg/apidoc/go.mod",
"axisml-system/artifact-hub/test/integration/go.mod",
"axisml-system/cluster-manager/go.mod",
"axisml-system/cluster-manager/pkg/apidoc/go.mod",
"axisml-system/cluster-manager/test/integration/go.mod",
"axisml-system/compute-operator/go.mod",
"axisml-system/compute-operator/test/integration/go.mod",
"axisml-system/compute-service/go.mod",
"axisml-system/compute-service/pkg/apidoc/go.mod",
"axisml-system/compute-service/test/integration/go.mod",
"axisml-system/tenant-operator/go.mod",
"axisml-system/tenant-operator/test/integration/go.mod",
"axisml-system/test/testutil/go.mod",
"pkg/axismlconfig/go.mod",
"pkg/configdoc/go.mod",
"pkg/openapigen/go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile, axisml-infra/Makefile, axisml-platform/Makefile, axisml-system/Makefile, tests/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile, axisml-infra/Makefile, axisml-platform/Makefile, axisml-system/Makefile, tests/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, eslint.config.js",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml, eslint.config.js"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "axisml-platform/frontend/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "axisml-platform/frontend/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "78 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 78,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 88919,
"source_files_sampled": 1459,
"oversized_source_files": 1
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "1/1459 source files over 60KB",
"points": 55,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 1459,
"oversized": 1
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "moderate",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Could not fetch go package 'github.com/axisml/axisml/pkg/configdoc' from its registry",
"Could not fetch go package 'github.com/axisml/axisml/pkg/openapigen' from its registry",
"Could not fetch go package 'github.com/axisml/axisml/pkg/axismlconfig' from its registry",
"Could not fetch go package 'github.com/axisml/axisml/axisml-platform/backend' from its registry",
"Could not fetch go package 'github.com/axisml/axisml/axisml-infra/axisml-scheduler' from its registry",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-22T06:45:18.648545Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/AxisML/axisml.svg",
"full_name": "AxisML/axisml",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}