JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 33466,
"has_wiki": true,
"homepage": null,
"languages": {
"Shell": 81557,
"JavaScript": 14704,
"TypeScript": 13206827
},
"pushed_at": "2026-07-18T01:18:05Z",
"created_at": "2026-03-16T09:12:16Z",
"owner_type": "User",
"updated_at": "2026-07-18T01:08:55Z",
"description": "Terminal AI coding agent with automated write-review-fix-check pipelines, multi-provider LLM support, and a vaporwave aesthetic.",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "main",
"license_spdx_raw": null,
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript"
]
},
"owner": {
"blog": "https://www.linkedin.com/in/mike-davis",
"name": "Michael Davis",
"type": "User",
"login": "mgd34msu",
"company": null,
"location": "Dallas, TX",
"followers": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/18431027?v=4",
"created_at": "2016-04-12T23:44:21Z",
"is_verified": null,
"public_repos": 22,
"account_age_days": 3753
},
"license": {
"state": "absent",
"spdx_id": null,
"raw_spdx": null,
"file_present": false,
"scorecard_found": false,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v1.19.5",
"kind": "patch",
"published_at": "2026-07-18T01:21:19Z"
},
{
"tag": "v1.19.4",
"kind": "patch",
"published_at": "2026-07-17T21:13:17Z"
},
{
"tag": "v1.19.3",
"kind": "patch",
"published_at": "2026-07-17T06:33:46Z"
},
{
"tag": "v1.19.2",
"kind": "patch",
"published_at": "2026-07-17T05:42:01Z"
},
{
"tag": "v1.19.1",
"kind": "patch",
"published_at": "2026-07-16T23:49:53Z"
},
{
"tag": "v1.19.0",
"kind": "minor",
"published_at": "2026-07-16T12:16:02Z"
},
{
"tag": "v1.18.0",
"kind": "minor",
"published_at": "2026-07-14T21:02:07Z"
},
{
"tag": "v1.17.0",
"kind": "minor",
"published_at": "2026-07-13T23:53:29Z"
},
{
"tag": "v1.16.1",
"kind": "patch",
"published_at": "2026-07-12T01:06:41Z"
},
{
"tag": "v1.16.0",
"kind": "minor",
"published_at": "2026-07-11T22:11:51Z"
},
{
"tag": "v1.15.0",
"kind": "minor",
"published_at": "2026-07-11T21:23:04Z"
},
{
"tag": "v1.14.0",
"kind": "minor",
"published_at": "2026-07-11T19:28:17Z"
},
{
"tag": "v1.13.1",
"kind": "patch",
"published_at": "2026-07-09T13:12:38Z"
},
{
"tag": "v1.13.0",
"kind": "minor",
"published_at": "2026-07-09T07:09:52Z"
},
{
"tag": "v1.12.0",
"kind": "minor",
"published_at": "2026-07-08T17:11:49Z"
},
{
"tag": "v1.11.1",
"kind": "patch",
"published_at": "2026-07-08T03:14:47Z"
},
{
"tag": "v1.11.0",
"kind": "minor",
"published_at": "2026-07-07T20:18:01Z"
},
{
"tag": "v1.10.1",
"kind": "patch",
"published_at": "2026-07-07T14:28:01Z"
},
{
"tag": "v1.10.0",
"kind": "minor",
"published_at": "2026-07-07T06:23:43Z"
},
{
"tag": "v1.9.2",
"kind": "patch",
"published_at": "2026-07-06T19:36:32Z"
},
{
"tag": "v1.9.1",
"kind": "patch",
"published_at": "2026-07-06T17:41:00Z"
},
{
"tag": "v1.9.0",
"kind": "minor",
"published_at": "2026-07-06T16:53:09Z"
},
{
"tag": "v1.7.0",
"kind": "minor",
"published_at": "2026-07-04T19:02:39Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2026-07-03T23:19:14Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2026-07-03T13:01:15Z"
},
{
"tag": "v0.29.0",
"kind": "minor",
"published_at": "2026-07-03T02:51:42Z"
},
{
"tag": "v0.28.0",
"kind": "minor",
"published_at": "2026-07-01T02:51:56Z"
},
{
"tag": "v0.27.0",
"kind": "minor",
"published_at": "2026-06-30T08:28:49Z"
},
{
"tag": "v0.26.0",
"kind": "minor",
"published_at": "2026-06-21T22:04:29Z"
},
{
"tag": "v0.25.0",
"kind": "minor",
"published_at": "2026-06-21T10:52:09Z"
},
{
"tag": "v0.24.1",
"kind": "patch",
"published_at": "2026-06-17T05:43:44Z"
},
{
"tag": "v0.24.0",
"kind": "minor",
"published_at": "2026-06-12T23:30:50Z"
},
{
"tag": "v0.23.0",
"kind": "minor",
"published_at": "2026-06-12T19:49:10Z"
},
{
"tag": "v0.22.0",
"kind": "minor",
"published_at": "2026-06-12T16:56:01Z"
},
{
"tag": "v0.21.0",
"kind": "minor",
"published_at": "2026-06-12T13:22:13Z"
},
{
"tag": "v0.20.3",
"kind": "patch",
"published_at": "2026-05-13T13:53:24Z"
},
{
"tag": "v0.20.2",
"kind": "patch",
"published_at": "2026-05-13T03:44:42Z"
},
{
"tag": "v0.20.1",
"kind": "patch",
"published_at": "2026-05-12T15:28:50Z"
},
{
"tag": "v0.20.0",
"kind": "minor",
"published_at": "2026-05-12T05:37:26Z"
},
{
"tag": "v0.19.99",
"kind": "patch",
"published_at": "2026-05-12T02:45:05Z"
},
{
"tag": "v0.19.98",
"kind": "patch",
"published_at": "2026-05-11T23:39:38Z"
},
{
"tag": "v0.19.96",
"kind": "patch",
"published_at": "2026-05-11T05:07:15Z"
},
{
"tag": "v0.19.95",
"kind": "patch",
"published_at": "2026-05-11T04:33:45Z"
},
{
"tag": "v0.19.94",
"kind": "patch",
"published_at": "2026-05-11T04:05:06Z"
},
{
"tag": "v0.19.93",
"kind": "patch",
"published_at": "2026-05-10T23:23:54Z"
},
{
"tag": "v0.19.92",
"kind": "patch",
"published_at": "2026-05-10T14:56:13Z"
},
{
"tag": "v0.19.91",
"kind": "patch",
"published_at": "2026-05-10T04:21:37Z"
},
{
"tag": "v0.19.90",
"kind": "patch",
"published_at": "2026-05-10T04:00:36Z"
},
{
"tag": "v0.19.89",
"kind": "patch",
"published_at": "2026-05-10T02:02:48Z"
},
{
"tag": "v0.19.88",
"kind": "patch",
"published_at": "2026-05-10T01:38:01Z"
},
{
"tag": "v0.19.87",
"kind": "patch",
"published_at": "2026-05-09T22:19:53Z"
},
{
"tag": "v0.19.86",
"kind": "patch",
"published_at": "2026-05-09T20:30:57Z"
},
{
"tag": "v0.19.85",
"kind": "patch",
"published_at": "2026-05-09T16:46:54Z"
},
{
"tag": "v0.19.84",
"kind": "patch",
"published_at": "2026-05-09T14:25:38Z"
},
{
"tag": "v0.19.83",
"kind": "patch",
"published_at": "2026-05-09T04:58:36Z"
},
{
"tag": "v0.19.82",
"kind": "patch",
"published_at": "2026-05-09T04:03:24Z"
},
{
"tag": "v0.19.81",
"kind": "patch",
"published_at": "2026-05-08T23:30:12Z"
},
{
"tag": "v0.19.80",
"kind": "patch",
"published_at": "2026-05-08T05:53:15Z"
},
{
"tag": "v0.19.79",
"kind": "patch",
"published_at": "2026-05-08T05:45:34Z"
},
{
"tag": "v0.19.78",
"kind": "patch",
"published_at": "2026-05-08T02:19:24Z"
},
{
"tag": "v0.19.77",
"kind": "patch",
"published_at": "2026-05-08T01:31:13Z"
},
{
"tag": "v0.19.76",
"kind": "patch",
"published_at": "2026-05-08T00:34:31Z"
},
{
"tag": "v0.19.75",
"kind": "patch",
"published_at": "2026-05-07T23:07:23Z"
},
{
"tag": "v0.19.73",
"kind": "patch",
"published_at": "2026-05-07T21:43:10Z"
},
{
"tag": "v0.19.72",
"kind": "patch",
"published_at": "2026-05-07T20:16:04Z"
},
{
"tag": "v0.19.71",
"kind": "patch",
"published_at": "2026-05-07T18:47:52Z"
},
{
"tag": "v0.19.70",
"kind": "patch",
"published_at": "2026-05-07T17:48:35Z"
},
{
"tag": "v0.19.69",
"kind": "patch",
"published_at": "2026-05-07T06:29:04Z"
},
{
"tag": "v0.19.68",
"kind": "patch",
"published_at": "2026-05-06T22:19:34Z"
},
{
"tag": "v0.19.67",
"kind": "patch",
"published_at": "2026-05-06T14:10:00Z"
},
{
"tag": "v0.19.66",
"kind": "patch",
"published_at": "2026-05-06T05:17:23Z"
},
{
"tag": "v0.19.65",
"kind": "patch",
"published_at": "2026-05-06T04:03:41Z"
},
{
"tag": "v0.19.64",
"kind": "patch",
"published_at": "2026-05-06T02:53:49Z"
},
{
"tag": "v0.19.63",
"kind": "patch",
"published_at": "2026-05-06T01:16:18Z"
},
{
"tag": "v0.19.62",
"kind": "patch",
"published_at": "2026-05-05T12:57:49Z"
},
{
"tag": "v0.19.61",
"kind": "patch",
"published_at": "2026-05-05T12:42:39Z"
},
{
"tag": "v0.19.60",
"kind": "patch",
"published_at": "2026-05-01T10:09:50Z"
},
{
"tag": "v0.19.59",
"kind": "patch",
"published_at": "2026-05-01T09:45:27Z"
},
{
"tag": "v0.19.58",
"kind": "patch",
"published_at": "2026-05-01T09:23:23Z"
},
{
"tag": "v0.19.57",
"kind": "patch",
"published_at": "2026-05-01T09:10:39Z"
},
{
"tag": "v0.19.56",
"kind": "patch",
"published_at": "2026-05-01T08:28:27Z"
},
{
"tag": "v0.19.55",
"kind": "patch",
"published_at": "2026-05-01T08:04:08Z"
},
{
"tag": "v0.19.54",
"kind": "patch",
"published_at": "2026-05-01T06:24:19Z"
},
{
"tag": "v0.19.53",
"kind": "patch",
"published_at": "2026-04-29T03:02:17Z"
},
{
"tag": "v0.19.52",
"kind": "patch",
"published_at": "2026-04-29T00:17:55Z"
},
{
"tag": "v0.19.51",
"kind": "patch",
"published_at": "2026-04-28T23:29:01Z"
},
{
"tag": "v0.19.50",
"kind": "patch",
"published_at": "2026-04-28T20:42:21Z"
},
{
"tag": "v0.19.49",
"kind": "patch",
"published_at": "2026-04-28T18:31:14Z"
},
{
"tag": "v0.19.48",
"kind": "patch",
"published_at": "2026-04-28T05:44:08Z"
},
{
"tag": "v0.19.47",
"kind": "patch",
"published_at": "2026-04-28T02:30:42Z"
},
{
"tag": "v0.19.46",
"kind": "patch",
"published_at": "2026-04-28T01:57:13Z"
},
{
"tag": "v0.19.44",
"kind": "patch",
"published_at": "2026-04-27T19:50:21Z"
},
{
"tag": "v0.19.43",
"kind": "patch",
"published_at": "2026-04-27T18:55:56Z"
},
{
"tag": "v0.19.42",
"kind": "patch",
"published_at": "2026-04-27T18:11:52Z"
},
{
"tag": "v0.19.41",
"kind": "patch",
"published_at": "2026-04-27T17:03:00Z"
},
{
"tag": "v0.19.40",
"kind": "patch",
"published_at": "2026-04-27T15:25:07Z"
},
{
"tag": "v0.19.39",
"kind": "patch",
"published_at": "2026-04-27T14:16:14Z"
},
{
"tag": "v0.19.38",
"kind": "patch",
"published_at": "2026-04-27T04:37:09Z"
},
{
"tag": "v0.19.37",
"kind": "patch",
"published_at": "2026-04-27T00:15:32Z"
},
{
"tag": "v0.19.36",
"kind": "patch",
"published_at": "2026-04-26T22:49:06Z"
}
],
"recent_commits": [
{
"oid": "6393d1fb41dd5c396995a038c7f3b0bc7c9ba45e",
"body": null,
"is_bot": false,
"headline": "chore: release 1.19.5",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-18T01:08:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f3a86ee24595f08a634cfc6b7e99de5545490a3",
"body": "Carries the secrets-store key-mismatch hardening: exclusive keyfile\ngeneration, pre-write key revalidation with missing-keyfile restore, and\nkey fingerprints in store envelopes for precise mismatch reporting.",
"is_bot": false,
"headline": "deps: adopt published SDK 1.11.4 + terminal-shell 1.11.4",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-18T01:08:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6cebcd67286a8c8a664d6b19402a12f07d5fcbd1",
"body": "Every spawn withholds the same standing set of credential-bearing env-var\nnames, so the 'withheld: NAME, NAME, +N more' suffix repeated an identical\nwall of env-var names on every exec result all session long. The collapsed\nline now carries nothing about the scrub; the full withheld_env name list\nstays in the expanded raw payload for diagnosing a command that failed\nbecause a needed credential was scrubbed.",
"is_bot": false,
"headline": "fix: keep the credential-scrub report off collapsed exec lines",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-18T00:41:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "590d57c49bd617740f4a7e6fc22244c499657073",
"body": "…ture cap\n\nThe boot-model guard moves to provider-fallback.ts (ensureBootModelResolvable),\nthe fatal-startup reporter moves to cli/tui-startup.ts, and the\ncontext-accounting wiring collapses into a one-call helper on its own module.\nNo behavior change.",
"is_bot": false,
"headline": "fix red CI: keep main.ts and bootstrap.ts under the 800-line architec…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T21:00:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e2f7e3f2b4b87cd889dddd8bef12a2e188695213",
"body": null,
"is_bot": false,
"headline": "chore: release 1.19.4",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T20:46:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f29a241522e62f6ad2941239956128a3124a0df",
"body": "Boot fixes: bootstrap awaits the custom-provider load (and re-runs the\nroutability guard) before the first current-model resolution, with a\nselectable-model fallback when the configured provider no longer exists —\na saved custom-provider model no longer crashes startup. The fatal handler\nnow logs me\n[…]\n{}'.\n\nTranscript: compaction-continuation user messages fold to a 'compaction\nhandoff' block (expandable) instead of re-printing the full re-injected\ninstruction wall after every automatic compaction.",
"is_bot": false,
"headline": "deps: adopt published SDK 1.11.3 + terminal-shell 1.11.3",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T20:46:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a2ee22fc674ffb6e184fce505bfb01b35884a9af",
"body": "The version bump rewrites the platform optional-dependency pins in\npackage.json, but the lockfile was regenerated before the bump, so the\nnow-frozen install rejects the mismatch on runners (bare bun install\nmasked this until the frozen flip). Refresh the lockfile and make\nrelease-cut regenerate + commit bun.lock on every future cut.",
"is_bot": false,
"headline": "fix red CI: the release-cut bump desyncs bun.lock from the platform pins",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T06:20:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "411fea0a62a1484d93b73828fbd645a8c54d4692",
"body": null,
"is_bot": false,
"headline": "chore: release 1.19.3",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T06:13:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e1e4f446b755accb405ae4f1eba0e752ada51140",
"body": "Re-pin @pellux/goodvibes-sdk and @pellux/goodvibes-terminal-shell to\n1.11.2 and drop the @pellux/goodvibes-toolchain devDependency, since\nthe SDK now carries the toolchain as a real dependency and resolves it\ntransitively (sdk-pin-gate and bunx toolchain resolution both verified\ngreen without the di\n[…]\n\nRegenerated foundation artifacts and the command reference against the\nnew SDK version, and extended the workflow-shape test suite to cover\nthe new auto-release job and the release.yml mode dispatch.",
"is_bot": false,
"headline": "deps: adopt published SDK 1.11.2 + zero-touch release adoption",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T06:13:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6534dfdf1e3b67621e4588f134c869889096a232",
"body": "The vendored contract artifact carries the SDK's contract version stamp;\nthe 1.11.1 re-pin changed it and the foundation-artifacts gate rightly\ncaught the drift (regeneration belongs to every SDK adoption commit).",
"is_bot": false,
"headline": "docs: regenerate operator contract artifact against SDK 1.11.1",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T05:29:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f15cf89cbf1c188b87d6d1f43bf9e83d463270e0",
"body": "1.11.1 adds the toolchain dispatcher bin (bunx package-name resolution),\nwhich is what this repo's release lane invokes; sdk and terminal-shell ride\nthe same version so one SDK instance resolves across the tree.",
"is_bot": false,
"headline": "deps: adopt published SDK 1.11.1 + toolchain 1.11.1",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T05:18:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3184501b088abda3145412c5eb26b2539f1387ee",
"body": "…10.1\n\nThe setup action's input description carried a literal vars expression —\nGitHub template-evaluates action metadata and the vars context does not\nexist in composite actions, so every consuming job failed at load. The\ndescription is now expression-free and a shape test pins the class.\n\nterminal-shell stayed pinned to 1.10.1 during the 1.11.0 re-pin, which\nnested a second SDK copy under it and broke type identity; it now rides\n1.11.0 with the rest of the platform.",
"is_bot": false,
"headline": "fix red CI: composite metadata expression + terminal-shell left on 1.…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T04:56:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fda09070a8501c3f999a69daf4a8a0c4212c4d6",
"body": null,
"is_bot": false,
"headline": "chore: release 1.19.2",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T04:42:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f095f36121580738583520c2ff797acdab0de951",
"body": "The toolchain dev-link (local file: tarball + override) served the CI/CD\nbuild round; the package is now published, so the devDependency re-pins to\nthe exact registry version, the override is gone, the lockfile resolves from\nthe registry, and the setup composite returns to bun install\n--frozen-lockfile per the shared setup contract.",
"is_bot": false,
"headline": "deps: adopt published SDK 1.11.0 + toolchain 1.11.0 from the registry",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T04:42:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f2b67cfdd12853730c0b476cf5ce5e2c4fba2821",
"body": "…flows request\n\nGitHub validates reusable-workflow permission grants at startup: a callee job\nrequesting more than the caller job grants rejects the entire workflow with\nstartup_failure and an empty jobs list. Grant actions:read + checks:read on\nrelease-verify, contents:write on gh-release, and id-token:write on\npublish-npm; pin the contract with a shape test.",
"is_bot": false,
"headline": "ci: caller jobs must grant the permissions their called reusable work…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T04:30:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "831a7d9735264ab364b10eb401ada944efcd465a",
"body": "…tract\n\nreusable-binary-matrix now requires binary on every smoke:true leg (each matrix\nleg only builds its own suffixed artifact; the smoke step hard-fails without\nit — no binaryDefault fallback on the matrix path). The linux-x64 smoke leg\nnames dist/goodvibes-linux-x64, and the shape suite pins binary-present-on-\nsmoke-legs cross-checked against toolchain.config.json's outDir + appArtifact.",
"is_bot": false,
"headline": "release: smoke matrix legs carry their own binary per the updated con…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T01:40:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "353774ad4b8f2ffca729a3d47484e37a73eebfbc",
"body": "…ain note\n\n- workflow-shape: artifact-glob (binaries) and assets-glob (gh-release) must be\n multi-line blocks with one glob per line — a space-separated single-line value\n silently becomes one glob that matches nothing, a defect class an adjacent\n repo's shape suite passed over.\n- setup composite: explicit train note at the bare bun install — deliberate\n while the toolchain is dev-linked via a file: tarball; flip to\n --frozen-lockfile once the train re-pins the published version.",
"is_bot": false,
"headline": "cicd: pin newline-separated glob inputs in the shape suite + setup tr…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T01:36:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "683c3398c7829037827d32af93ca895b9227b84e",
"body": "…file\n\nThe hand-written docs/releases/<version>.md notes must keep winning over the\nchangelog excerpt. stage-release-assets now exposes a tag-derived version\noutput (v prefix stripped — the same resolution the old validate-release used;\ndocs/releases files are named <version>.md), and the gh-release\n[…]\n: docs/releases/<version>.md to the reusable workflow's new optional\ninput (file content wins when present at the ref, changelog excerpt otherwise).\nShape test pins the input and its producing output.",
"is_bot": false,
"headline": "release: restore the per-release notes override via gh-release notes-…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T01:12:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "526d2daec0e56803be45421bd01f831dc0c18796",
"body": "- setup composite: single-source bun-version input (default 1.3.14).\n- ci.yml: 8-job graph preserved; cancel-in-progress scoped to PRs only.\n- release.yml: by-reference release. release-verify (reusable-release-verify,\n toolchain-source registry) replaces the serialized validate-release re-run;\n b\n[…]\n, native-arm64 smoke, and npm-install smoke kept as local jobs.\n- workflow-shape.test.ts: pins the job graphs, needs edges, no continue-on-error,\n timeout caps, SHA-pins, and the reusable @main refs.",
"is_bot": false,
"headline": "cicd: rewire workflows onto the shared composite + reusable workflows",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T00:59:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4ad639233b24392839f2d22e26d68db3dbf022bd",
"body": "The shared mechanics now come from @pellux/goodvibes-toolchain, driven by\ntoolchain.config.json:\n- publish-check: sdk-pin-gate (pin tri-agreement + import sweep) +\n package-install-check (tarball/bin policy); keeps the TUI-only publish-field\n and registry-auth checks.\n- package-install-check: tool\n[…]\ngoodvibes-post-build-smoke (banner smoke). Deleted build.ts and\n smoke-tui-binary.ts (superseded). The daemon HTTP smoke (post-build-smoke.ts)\n has no toolchain equivalent and stays as smoke:daemon.",
"is_bot": false,
"headline": "cicd: swap release/build/gate scripts to thin toolchain invocations",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T00:51:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "224f9b4bc85a8ce60950f8bc7e9167bd2e0dd291",
"body": "Declares the TUI's real release behaviors for the shared toolchain: 4-target\nbinary matrix with the daemon leg and sqlite-vec addon handling, coverage\nfloors (71/75), the platform-package version-file set + commit paths, changelog\nbracket heading with first-separator insert, the tarball publish policy, and the\nper-job-green workflow (ci.yml). sync-platform-optional-deps.ts re-stamps the\nroot optionalDependencies map at release time (a TUI-specific version-sync step\nrelease-cut does not own).",
"is_bot": false,
"headline": "cicd: add toolchain.config.json contract + platform optional-deps sync",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T00:46:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1484f09a8809dd9d4609ca291cdd212b0623d520",
"body": "Adds the shared CI/CD toolchain as a devDependency + override pointing at a\nlocally-built tarball (packed from goodvibes-sdk packages/toolchain at commit\n20093d41). The package is not on npm yet; the next release train re-pins the\npublished version. See toolchain.config.json header (TOOLCHAIN-PIN).",
"is_bot": false,
"headline": "build: dev-link @pellux/goodvibes-toolchain from SDK 20093d41 tarball",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-17T00:45:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a283e8a60ff0df003020ba5ae16a420ce2b74bc4",
"body": null,
"is_bot": false,
"headline": "chore: release v1.19.1",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T23:24:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e97ce376048d361ad4a7bc8067b943beed6c088",
"body": "Swap the rebuilt-from-primitives voice-setup wiring for the SDK's\ncreateVoiceSetupService via the new ./platform/runtime/voice-setup\nsubpath, keeping the TUI's injected seams and behavior identical.\nRegenerate the operator contract artifact for the SDK version stamp.",
"is_bot": false,
"headline": "deps: adopt SDK 1.10.1 and consume the exported voice-setup composer",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T23:24:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c45f289863eab459f2209fe83a1d853342276699",
"body": null,
"is_bot": false,
"headline": "chore: release v1.19.0",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T11:57:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "654eae83a9e5b02664c66805e951c834bb1c6b58",
"body": "…ifact",
"is_bot": false,
"headline": "deps: adopt published SDK 1.10.0 and regenerate operator contract art…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T11:57:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a70552692f036c176c7600a1f668a04abba78cab",
"body": "… surfaces\n\n/voice gains status/setup, /health (doctor) gains memory, and the operator\ncontract now carries ops.memory.get + voice.local.status/install (with the\ninstallInProgress live-progress section documented). Regenerated via\ndocs:commands and foundation:artifacts.",
"is_bot": false,
"headline": "docs: regenerate command reference + foundation artifacts for the new…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T07:54:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "17bcce8abab2ad347b5e5175d364414fb558e5ed",
"body": "Adopt the SDK's install-progress mechanism (SDK 5357f09e): voice.local.status\nnow carries an optional installInProgress snapshot while an install runs. The\ndaemon composition wires createVoiceInstallProgressTracker around the\nsingle-flight install (begin, provisioner onProgress, end) and merges the\n\n[…]\neceipt. A\ncomponent whose phase has not changed is not re-printed. Render + polling wire\ntests cover the download/verify/extract/error progress states with an injected\nfake gateway and no real timers.",
"is_bot": false,
"headline": "voice setup: live per-component install progress",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T07:48:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cd1d1889c0a526164eb8835ff2d86801fe758f70",
"body": "…r the 800-line cap\n\nComposing the governor + managed voice pushed the composition root over the\narchitecture check's 800-line cap. Following the established pattern\n(createWorkstreamServices / createDurabilityServices / createCodeIndexServices),\nmove the knowledge/wiki + home-graph stack into creat\n[…]\nssure threading) and the managed-voice\nsingle-flight into wireVoiceSetup, each a single wiring call in services.ts.\nBehavior is unchanged; the composition-parity pins are updated to the new\nlocations.",
"is_bot": false,
"headline": "extract knowledge + voice-setup construction to hold services.ts unde…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T07:42:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6eabbe16af65891ce89a18357911342e43fc6cf8",
"body": "Mirror the SDK's own createRuntimeServices: build the CacheRegistry,\nPauseController and the late-bound admission gate EARLY so the knowledge\nbackground jobs, the code-index reindex scheduler, and memory consolidation\nconsult the pause controller and the admission gate before the governor\nexists; th\n[…]\nontroller to RuntimeServices. Composition-parity pins\nthe wiring (source-level, mirroring the power seam) and a behavioral test\nasserts the live governor, its registered caches, and its pausable jobs.",
"is_bot": false,
"headline": "compose the memory governor + managed voice provisioning in the daemon",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T07:34:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4ea805141d190f0d0fbb4c6b2e6bfdaa61b33b30",
"body": "Non-linux-x64 platforms report unsupported-platform (there is no managed\nwhisper build), so the status STT line reads 'unsupported on this platform'\nrather than 'not yet published' — the latter is reserved for the pinned-but-\nunhosted case (supported, unprovisioned, with a reason). The install receipt's\nbundle-unavailable / sideload-mismatch terminal states keep their honest\nlabels.",
"is_bot": false,
"headline": "voice status: render the real STT enums honestly",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T07:30:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c7c99a05e8cccd1840609b8d53174fd150eb02f6",
"body": "Add a projection module (memory-status.ts) and an injectable operator-invoke\ngateway (memory-diagnostics-gateway.ts) over the SDK's ops.memory.get verb, and\nrender the MemoryGovernor snapshot under /health memory (alias /doctor memory):\ntier + posture, budget vs RSS and heap in human units, tier thr\n[…]\ns lifted into the notice feed on its own\ntargeted bridge (critical on the critical tier or a tripwire firing, warning at\nhigh) so the high-churn ops domain stays out of the wholesale notice allowlist.",
"is_bot": false,
"headline": "memory: doctor/status surface + pressure notice over ops.memory.get",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T07:25:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "49b5ac83567479961ee126b628aa70db563ae0b4",
"body": "The TTS provider picker renders the managed local engine next to ElevenLabs;\nwhen the local engine is not yet provisioned it now shows a size-labeled\none-act setup offer (detail line 'local voice: not set up — run /voice setup\n(~85 MB)'), computed synchronously from the pinned piper manifest so no daemon\nround-trip is needed to label the download. A provisioned engine reads\n'configured'; a platform with no managed build says so honestly rather than\noffering a fabricated install.",
"is_bot": false,
"headline": "voice settings: size-labeled local-engine setup offer beside ElevenLabs",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T07:21:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f2bf0bb6cc7fe7ed42a05eb5a2a35d1c79d97f53",
"body": "…ice verbs\n\nAdd a projection module (voice-provision-status.ts) and an injectable\noperator-invoke gateway (voice-provision-gateway.ts) over the SDK's\nvoice.local.status / voice.local.install verbs, and wire /voice status +\n/voice setup into the existing /voice command. Sizes are declared up front,\nt\n[…]\n, and a\nwhisper bundle that is pinned-but-unhosted reads 'not yet published for this\nplatform'. A daemon that predates the verbs (501/404) is surfaced as\nunavailable, never a fabricated empty install.",
"is_bot": false,
"headline": "voice: /voice setup + /voice status one-act over the managed local-vo…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T07:19:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f7bb30f66a1f68608fa01490231f23b36a4e2ca0",
"body": "…nce-gated replacement, kept promises, honest not-probed",
"is_bot": false,
"headline": "changelog: macOS in-app fleet coverage, regeneration backups, provena…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T00:36:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c26ad724814e7127cb38a5904c20103a8c4f1572",
"body": "…est — never a definite reachable:false\n\nFix round 4, display honesty residue: the recognized-gated probe skip on\nthese two surfaces coerced 'not probed' to the affirmative FALSE — text\n'reachable: no' and JSON reachable:false for an endpoint a daemon (launched\nwith flag overrides) demonstrably answ\n[…]\ned\nfrom JSON, matching the seam's honest sibling surfaces (surfaces listing and\nservice posture). A disabled endpoint keeps its definite no. Pinned with a\nlive listener mirroring the verifier's probe.",
"is_bot": false,
"headline": "cli: not-probed is a tri-state on control-plane status and listener t…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T00:36:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "50e10f36df23e2382d7ee951b4cfd4da860daf83",
"body": "…ntities, structural plist provenance, zero silence on pinned plists\n\nFix round 4, the launchd cluster:\n\n- The installer now knows BOTH platform LaunchAgent identities: its own\n sh.goodvibes.daemon.plist AND the product's in-app\n ~/Library/LaunchAgents/goodvibes.plist (label 'goodvibes'), which no\n[…]\nion (with a timestamped .bak + receipt); a pinned plist that is\n not recognizably platform-managed gets the honest Linux-style notice.\n ZERO-output silence on a pinned plist is gone in every branch.",
"is_bot": false,
"headline": "installer: the macOS in-app fleet is reachable — both LaunchAgent ide…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T00:34:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ac27ebdd959265563aa83ed0b4ff287df14054e4",
"body": "…gerprint regeneration, promises fulfilled on transfer refusal\n\nFix round 4, the systemd cluster:\n\n- The broken-ExecStart replacement branch is provenance-gated at ALL THREE\n restart_systemd_unit call sites, not just the legacy one: the canonical\n site classifies canonical_unit_provenance (only a \n[…]\n\n unit in place so the freshly installed binary actually starts serving, with\n the notice explaining why the transfer did not happen (or an honest\n restart-it-yourself note when the restart fails).",
"is_bot": false,
"headline": "installer: replace-broken gate at every call site, backups before fin…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T00:31:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "576b366573b87237f85b3dfc3f16dea636e8afae",
"body": "…er-touch hand-written units, honest bind displays",
"is_bot": false,
"headline": "changelog: modern-systemd vocabulary, fielded pinned-unit repair, nev…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T00:01:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e63581beccbcde61922822e2d539c7ea3c412934",
"body": "…tter seam\n\nClosure re-review round, display parity: recognized:false was consumed on\nonly two surfaces (the daemon banner and install-service). Now\nformatRuntimeEndpointBinding is THE display seam — status exposure rows\n(bind + reach), the status surfaces summary, doctor findings (a per-endpoint\nun\n[…]\ngated on recognized bindings —\nprobing the fallback endpoint asserts a binding that does not exist. (The\nresolver at source stays SDK-owned work; this keeps the TUI's defensive\nshape behind one seam.)",
"is_bot": false,
"headline": "cli: every display surface routes endpoint bindings through one forma…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-16T00:00:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4c3c471e0dfd298c987d33e6962d460eebe85097",
"body": "…nchd cannot-ask is never free-to-kill\n\nClosure re-review round, the never-touch pair:\n\n- restart_systemd_unit gained a replace-broken gate (third argument): the\n hand-written-legacy restart arm passes 0, so a hand-written ACTIVE unit\n whose ExecStart binary was deleted (daemon still running the d\n[…]\nrom an ssh\n session — 'Bad request') is cannot-ask, which reads as supervised/refuse —\n the restart path prints an honest cannot-determine note and never falls\n through to SIGTERM+nohup on a guess.",
"is_bot": false,
"headline": "installer: hand-written units survive the corpse state untouched; lau…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T23:55:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1d3b42d8636ecb8f3b35b84474db3d95dfc4878f",
"body": "…d + launchd, transfer + plain paths)\n\nClosure re-review round, the fielded-fleet pair:\n\n- Released v1.14.0-v1.18.0 in-app installs baked '--hostname <host> --port\n <port>' into goodvibes.service / the LaunchAgent, snapshotting\n config-at-install-time; those pins override the controlPlane settings\n[…]\ner. (The in-app macOS plist lives under the product's own label and\n path — the product rewrites it whenever install-service runs — so the\n installer touches only its own sh.goodvibes.daemon label.)",
"is_bot": false,
"headline": "installer: re-derive fielded pinned-endpoint units on upgrade (system…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T23:53:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "49fa896e3c42f471da65741a2b5017af35adb5c1",
"body": "…ch unit' is ABSENT, a failed MainPID query is UNKNOWN\n\nClosure re-review round, the state-vocabulary pair:\n\n- unit_active_state now recognizes every real systemctl vocabulary: rc 3 with\n a final state word stays inactive; rc 4 — modern systemd's LSB 'no such\n unit', verified live on this host (sy\n[…]\ncy daemon, with guard 5 blind to it because the legacy daemon itself\n answers the configured-endpoint probe. A KNOWN MainPID=0 still permits the\n retire (pinned so the tri-state cannot over-refuse).",
"is_bot": false,
"headline": "tri-state honesty for modern systemd and flapping probes: rc-4 'no su…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T23:50:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0019f2bf6ec1b04a2bab4c543823ba79de9b7445",
"body": "The migration module crossed the architecture gate's 800-line file cap after\nthe reconcile hardening. The reconcile (marker constant, deadline runner,\nguards, receipts) now lives in its own runtime module; the migration module\nkeeps the shared unit definition, detection, consented migrate-service\nengine, and the low-level systemctl runner utilities the reconcile imports\n(one-directional dependency, no cycle). Consumers re-pointed.",
"is_bot": false,
"headline": "runtime: split the startup reconcile into legacy-daemon-reconcile.ts",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T08:24:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3986860e2ab0c318d93d9213bb333f923a7da235",
"body": "…econcile",
"is_bot": false,
"headline": "changelog: config-derived units, fail-safe installer, serving-proof r…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T08:22:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9433bb11b82e1bb18797989db9bc57c164088c44",
"body": "…ndpoint-aware retirement, launchd run-state parity\n\nSecond adversarial re-review round, shell side:\n\n- FAIL-SAFE ON UNKNOWN everywhere: unit activity is tri-state (active /\n inactive / unknown — is-active exit 3 with a recognized state word vs a\n bus-unreachable failure), and per-pid supervision \n[…]\ng and never bootstraps an\n agent the user deliberately booted out (file updated, load command printed,\n honest receipt), and GOODVIBES_RESTART_DAEMON=0 gates reloads exactly like\n the systemd side.",
"is_bot": false,
"headline": "installer: fail-safe on unknown service state, config-derived unit, e…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T08:21:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5b66a3a16f4374a7026aa746790e09e01c9f3218",
"body": "…econcile; config-derived unit content; display parity flags\n\nSecond adversarial re-review round, TS side:\n\n- The canonical unit definition (buildManagedDaemonServiceManager) no longer\n bakes --hostname/--port into ExecStart: the daemon resolves the controlPlane\n endpoint from settings at boot, so\n[…]\nK's actual web machinery (resolveWebPort: bare Number, no\n collapse) instead of a bind path that does not exist for web; controlPlane\n and httpListener keep the resolveHostBinding-anchored collapse.",
"is_bot": false,
"headline": "daemon: endpoint-serving proof + never-stop-a-running-daemon on the r…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T08:21:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "eba26f902612671c898752a6e8c06a20ab3c4da3",
"body": "…d-honest banner",
"is_bot": false,
"headline": "changelog: describe the hardened migration, reconcile guards, and bin…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T04:19:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b7e7a36e67eb3088d84bd72d77c5552bbebd994a",
"body": "…unded systemctl, bind-honest banner\n\nFixes from the adversarial review of the startup reconcile and banner:\n\n- reconcileRedundantLegacyUnit's guard is no longer a bare is-active read\n (which a Type=simple unit reports from fork onward, including pre-bind\n crash-loop windows): it now requires the \n[…]\nhanging-systemctl probe proving the\ndefault runner is timeout-bounded; banner suite pins the verifier's four\nbind-mismatch probes (hostMode network/local inversion, env var, port 0,\nnon-numeric port).",
"is_bot": false,
"headline": "daemon: serving-proof + self-kill guards on the reconcile, timeout-bo…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T04:19:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b10000df15afc43ba62d7b393760a41362ab2f94",
"body": "…xit-status-checked retirement, quoting, launchd analog\n\nFixes from the adversarial review of the unit-unification change:\n\n- The dominant upgrade state (daemon actively serving under the legacy\n goodvibes-daemon.service, no canonical unit anywhere) now migrates instead\n of never converging: resta\n[…]\ngate, existing-canonical reuse,\nrollback, stop-failure abort, busless false-receipt, unreadable-file,\nspaced-path quoting (systemd-analyze verified where available), and three\nlaunchd migration cases.",
"is_bot": false,
"headline": "installer: supervised transfer for the legacy-active upgrade state, e…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T04:19:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e55eb1e7223436aa89a4a4accc42b7abb28d59b7",
"body": "…unit reconcile",
"is_bot": false,
"headline": "changelog: installer unit unification, honest daemon startup, legacy-…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T03:39:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "366560a0642312ee1a251060b607ce3222373d1c",
"body": "Two fixes for the same production incident:\n\n- Version resolution is hardened so a compiled single-file binary can never\n pick up an unrelated package.json's placeholder (e.g. 0.0.0); both\n src/version.ts and the CLI's getPackageVersion now trust only our own\n package.json name. The daemon prints\n[…]\n-written legacy unit is only reported, never touched.\n Best-effort, never blocks boot. Tests reproduce the exact two-unit host\n state and the banner uses a version sentinel (never the live VERSION).",
"is_bot": false,
"headline": "daemon: honest startup identity and unattended legacy-unit reconcile",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T03:39:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "615d60aa2dd7a3aba0cb370a42c3e45a44ff59f6",
"body": "…e unit\n\nThe curl installer wrote a goodvibes-daemon.service unit with a bare launch\ncommand (no args) while the in-app service setup manages goodvibes.service\nlaunched with --daemon-home/--hostname/--port. A host could end up running\nboth, and the bare unit booted a second daemon that fought the re\n[…]\ns a leftover installer-marker-managed goodvibes-daemon.service\n(hand-written ones are left alone and only reported). Tests cover fresh\ninstall, upgrade-with-legacy, and the hand-written-legacy notice.",
"is_bot": false,
"headline": "installer: unify the daemon service on the canonical goodvibes.servic…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-15T03:39:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "95c6ebaa202c038282fe161a3acee0e8d3d12e1b",
"body": null,
"is_bot": false,
"headline": "chore: release v1.18.0",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T20:37:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04356a3b66a9d507c671f7bf522489498ab04f1e",
"body": "Pin @pellux/goodvibes-sdk and @pellux/goodvibes-terminal-shell to the\npublished 1.9.0, dropping the local dev-link tarballs and the transitive\n@pellux override pins (the minimatch override stays).\n\nSDK 1.9.0's wireRuntimePower defaults an absent seam to the real host\nseam, which spawns systemd-inhib\n[…]\nreateHostPowerSeam() to keep live keep-awake/idle-inhibit behavior.\n\nThe composition-parity test pins both halves. The foundation\noperator-contract artifact is refreshed to the 1.9.0 contract version.",
"is_bot": false,
"headline": "adopt published SDK 1.9.0 and opt real runtimes into the host power seam",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T20:36:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1551e7f2ba1a7f085b2b0825b7d9230cace070ec",
"body": "…ing bug fix\n\nThe Memory modal gains a Proposals tab reading memory.consolidation.receipts\nover the same operator-invoke gateway seam the Fleet panel uses, lazily\nfetched with an honest loading/unavailable/error/none-pending state. Each\npending proposal lists its kind, reason, and affected record id\n[…]\nount instead, deferring an overflowing row to scrolling rather\nthan rendering it partially. The planning-modal golden was re-baselined\nbecause it had been rendering exactly this kind of truncated row.",
"is_bot": false,
"headline": "memory: consolidation proposals surface in the TUI, and a modal clipp…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T18:44:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6d65128a84468142c5ba2ed5da830a1130e3f416",
"body": "…rence regenerated\n\nThe SDK review gate now blocks deterministically when a reviewer emits no\nacceptance checklist, so the fabricated reviewer outputs in the chain tests\ncarry one (verified on pass, failed-evidence on fail) exactly like a real\nreviewer. docs/commands-reference.md regenerated for the one-act approve usage.",
"is_bot": false,
"headline": "gates: reviewer fixtures carry the acceptance checklist; command refe…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T15:49:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a975efdd1efc9819a44e50c58d6699e385f66aa7",
"body": "(a) Every toggle origin (/power, Alt+A, the settings modal) lands on the\npower.keepAwake config key; in the adopted-external topology one config\nsubscriber forwards each change to the DAEMON over power.keepAwake.set\n(best-effort, per-call rpc), so the daemon holds the inhibitor and keep-awake\nsurviv\n[…]\n row drops at compact\nheights, the safety chip does not (render test at compact height).\n(e) The settings-modal toggle takes effect live through the same config\nsubscription; every origin is one seam.",
"is_bot": false,
"headline": "keep-awake is daemon-held and the chip syncs across surfaces",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T15:40:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "101d00decebb54aa26f2624d6136c7be93c3d1a3",
"body": "…list and task-graph posture\n\n(a) The 'used N memories' drill-in resolves each record id to its record\nSUMMARY through the memory spine — per-id and lazily (a collapsed chip costs\nnothing, one forgotten record never blanks the rest, honest 'no longer\navailable' fallback), matching the webui's proven\n[…]\nthing renders before a review completes.\n(c) A workstream row's task-graph edges/pool posture renders in-panel under the\nchain (fetched + cached by fleet-acts via fleet.graph.get); /graph still works.",
"is_bot": false,
"headline": "surface honesty: resolved provenance summaries, in-panel review check…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T14:15:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "97ddf140dac15c3f190dbf7a968e896189113fc3",
"body": "…; observed-agent composition subpath bundle entry)",
"is_bot": false,
"headline": "dev-link: re-link to sdk fd0e6b29 (review wire seam on the fleet node…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T14:05:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "28d48db46e56b616b9d786823302a016ba4af997",
"body": "… .preserved dance\n\n(a) deleteRecoveryFile now passes the session id on clean exit — one session's\nexit no longer wipes every session's crash snapshot (concurrent-session\nisolation bug).\n(b) Startup restores the newest crash snapshot SILENTLY via autoRestoreRecovery\n(no Ctrl+R prompt/banner): it app\n[…]\n; no .preserved path survives. blocking-input now handles\nonly pending-permission input. Tests: concurrent-session delete isolation,\nsilent restore + receipt, and the replay seam through the new path.",
"is_bot": false,
"headline": "recovery honesty: session-scoped delete, silent auto-restore, no more…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T14:03:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ed61ab6b62a6cdd531652213734eb127ecfa86cd",
"body": "/workstream approve now approves AND launches in one confirmed act (typing the\nverb with an explicit id is the confirmation), killing the retype ceremony; a\n--no-launch flag keeps the split for scripts and --force skips the fan-out quota\nwarning. The launch gates (attempt validation + quota) move to\n[…]\nree removal, honest receipt) — the same behavior\nas the Fleet panel's D key — instead of only flipping the persisted state field.\npause/resume/keep keep their metadata-flip behavior. Tests cover both.",
"is_bot": false,
"headline": "one-act lifecycle verbs: approve launches, discard really discards",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T13:46:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3ec4f97ba2e3f8757001dbd35617088036d391c0",
"body": "…hestration.maxActiveAgents key\n\nThe legacy key was renamed to fleet.maxSize; a post-construction .set() of the\nold key never migrates, so both writes were dead — masking whether the ceiling\nwas actually applied. Switch to the canonical key.",
"is_bot": false,
"headline": "surface honesty: two gate tests write fleet.maxSize, not the dead orc…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T13:39:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ad8eb48981141b5b379876b9424cfc9df618c508",
"body": "fleet.observed.steer had zero callers: pressing 's' on an observed foreign-agent\nrow only printed a pointer. Wire the drill-in composer in fleet-acts (the mode\nowner) — 's' on a tmux-channel row opens a compose input in the row's detail,\nEnter round-trips fleet.observed.steer (node id + text; the da\n[…]\nhannel-less row opens no input and states the honest\nreason. Steer stays drill-in-only; stop is never offered. Tests cover the\nround-trip, cancel, refusal, and the no-channel/hint/draft render states.",
"is_bot": false,
"headline": "observed rows get a real drill-in steer path",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T13:38:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "70e55cf910dba5d85f5a0b935e8b4c67fd3fc442",
"body": "…nfig-file watch on TUI-composed runtimes\n\nThe forked composition never called runStartupAppendOnlySweep or\nconfigManager.watchConfigFiles(), so the retention janitor and live config\napply the SDK runs at construction never ran on any TUI-composed daemon or\nsurface. Wire both into the durability helper with the full roots set\n(working dir, surface root, home, logDir, telemetryDir) so no append-only\nstore class is silently skipped. Composition-parity test pins both.",
"is_bot": false,
"headline": "fork parity: run the startup retention sweep (full roots) and live co…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T13:23:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86a3e24c49e8e04ac3e14f3c9d92fecb9954dd9c",
"body": "… wiring fits under the file-size cap\n\nLifts the archive-aware fleet registry construction (and the daemon-side\nobserved foreign-agent source) out of services.ts into a sibling helper,\nmirroring the other create*Services extractions, keeping the composition root\nat the 800-line cap. Parity test now pins the helper's opt-in construction.",
"is_bot": false,
"headline": "fleet composition: extract createFleetServices helper so the observed…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T13:16:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6e50397b2d3882f0e88281407c7312fe26b5d21b",
"body": "…hrough the fork so real users see observed rows\n\nThe forked createRuntimeServices never passed an observedAgents dep, so the\nwhole observed-foreign-agents feature was invisible on every shipped daemon.\nAdd the observeExternalAgents option (daemon-side only), construct the\nObservedAgentSource under it, and thread it into the shared fleet registry.\nThe standalone daemon cli turns it on; the interactive process leaves it off\nand reads the daemon snapshot. Composition-parity test pins both sides.",
"is_bot": false,
"headline": "daemon composes observed foreign agents: wire observeExternalAgents t…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T13:12:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f92cb10673f7e6f76cab6a8719be341f5241131",
"body": "… daemon-composition subpath, unblocks the daemon composing observed rows)",
"is_bot": false,
"headline": "dev-link: re-link to sdk d0a1b96c (observed-agent source exposed on a…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T13:09:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f84a53974fd824ddb81e9a654c2384f7022841d",
"body": "…extension)",
"is_bot": false,
"headline": "identifier rule: ban worded plan-item labels (mirror the SDK scanner …",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T12:59:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cedeb53ef4ba0c91d0d6dbe09aaa4e587647cdee",
"body": "…n.receipts verb, recovery/ registered)",
"is_bot": false,
"headline": "dev-link: re-link to sdk e0a5595d (cert-minting removed, consolidatio…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T12:57:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62dd21e242053ea796186aacd1c9b9cde2b59207",
"body": "…face new keys; refresh goldens\n\nFull-suite failures from the SDK bump + this round's new surfaces, all resolved:\n\n- fleet.maxSize (renamed from orchestration.maxActiveAgents): schema-extensions\n and config-selection-modal now assert the new key; the spawn-token/permission\n reason message asserts \n[…]\nut-helpers tests rewritten to the\n per-session scheme (writeRecoveryFile) and the checkRecoveryFile-resolved\n preserve-on-dismiss.\n\nAll touched source files kept under the 800-line architecture cap.",
"is_bot": false,
"headline": "gates: adopt the SDK's fleet.maxSize rename and fix-phase rework; sur…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T10:56:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d0d5d9d0f680f06611910385d219ea225eb8e6eb",
"body": "…ETED.metadata.memory.recordIds)\n\nFinal re-link of the cycle. 89690d07 publishes the provenance wire producer: a\nturn with memory injections carries metadata.memory.recordIds (memory-sourced\nknowledge-record ids; absent when none), typed on the events/turn contract. The\n\"used N memories\" chip reads \n[…]\nh git-archive extraction, built, all ten packed into a new\ndurable tarball dir; old a03bf218 dir removed; bun.lock regenerated after a\ncache clear. Foundation artifacts re-exported. tsc --build green.",
"is_bot": false,
"headline": "dev-link: re-link to sdk 89690d07 (memory-provenance rides TURN_COMPL…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T10:28:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d4ad82cefd1fb41d0702b3aa83fba860c4c2e8e4",
"body": "…file under the 800-line cap\n\nObserved foreign agents (kind 'observed-external' — externally-launched Claude\nCode / Codex / opencode sessions goodvibes only WATCHES):\n- render as their own visibility row (honest external kind + liveness-derived\n active/quiet state), routed from renderFleetRowLine/r\n[…]\neSyntheticEntry (out of settings-modal-data).\n\nRender tests: observed row (kind + liveness) and detail (steerable channel /\nnone-reason, no stop) at 80x24 and 60 columns, plus the count-exclusion pin.",
"is_bot": false,
"headline": "observed foreign agents render in the fleet pane; keep every touched …",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T10:26:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fb72178088a71127e96505da27e6d8c16c4c7260",
"body": "…a one-line attach notice\n\nThe memory-consolidation scheduler now feeds its run receipts into the SAME\nattach-time queue every other receipt uses. A run that merged/archived/decayed/\nproposed something records a one-line notice (\"Memory consolidation: N merged, …\n(scanned S).\") into the file-backed \n[…]\nA quiet run\nrecords nothing.\n\nTests: the formatter (changed-run line and quiet-run null), and a seeded receipt\nrendered through consumeDaemonAttachNotices as a one-line notice, delivered\nexactly once.",
"is_bot": false,
"headline": "consolidation receipts: an idle memory-consolidation run surfaces as …",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T09:51:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d2402ea4c2e659b2e6df4bc3ca0a6d21080c9397",
"body": "…tion\n\nRe-points the \"used N memories\" chip at the SDK's turn-payload convention\nmetadata.memory.recordIds (the same field the webui chip reads) instead of a\nTUI-local injection-ring derivation, so both surfaces name the same records.\n\n- memoryRecordIdsFromTurn reads metadata.memory.recordIds struct\n[…]\nrying metadata.memory.recordIds and assert the\noff-default renders zero lines; plus the field-absent/non-string cases, the\nchip render (collapsed/expanded, 80 and 60 columns), and the settings domain.",
"is_bot": false,
"headline": "memory provenance chip: read the SDK metadata.memory.recordIds conven…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T09:48:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ebd7f06b266dd05eb2315c9feab1ec54d8db67e0",
"body": "…ture, legible\n\nAdopts fleet.graph.get (the 1.4.3 task-graph surface). A pure renderer projects\na WorkstreamGraphSnapshot into legible lines — the shape of the dependency graph\nwithout opening a transcript:\n\n- The pool posture on its own line: \"N ready, M running[, at cap\n (fleet.maxSize=N)]\" (the \n[…]\none such workstream).\n\nRender tests: every state at 80 and 60 columns with a no-overflow assertion,\nplus the at-cap pool line, orphaned tell, inline edges, empty-graph honesty, and\na long-reason wrap.",
"is_bot": false,
"headline": "task graph renders: a workstream's nodes, edges, states, and pool pos…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T09:44:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "124332e6e0ec7fdd239876beb106c917e939249d",
"body": "…icker, cost stays honest\n\n- The free, offline local voice provider now registers: ensureBuiltinVoiceProviders\n is handed the voice.local.* config reader, so \"Local engines (free, offline)\"\n appears in the TTS provider picker beside elevenlabs and reports an honest\n 'unconfigured' status (never a\n[…]\nys + enum shapes), the provider registry\n(local + elevenlabs both streaming-TTS, local billing none + unconfigured), and\nthe cost-attribution rendering (metered unpriced-with-source, local no-record).",
"is_bot": false,
"headline": "voice settings: local engines surface, the local provider joins the p…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T09:36:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7a5c5fa9aa2b913e239c4e54f06d6a2f8c6dafa6",
"body": "…th a drill-in\n\nOwner-ruled 2026-07-13, default OFF. The SDK already records which standing\nmemories each turn injected (Orchestrator.getTurnInjections). When the new\nmemory.showProvenance setting is on, a turn that drew on memories shows a small\n\"used N memories\" chip; Alt+M expands its drill-in li\n[…]\ndomain surfaces the toggle (default OFF).\n\nRender tests (collapsed/expanded, 80x24 and 60 columns, and the zero-lines-when-\nunused case), the id-projection/selection tests, and a settings-domain test.",
"is_bot": false,
"headline": "memory provenance chip: an opt-in \"used N memories\" turn indicator wi…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T09:32:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "93fed956b00aed5fa3be80a34905d28334effe30",
"body": "…honest lid-split, a one-key toggle\n\nAdopts the SDK's sleep-ownership domain end to end.\n\n- The always-visible \"sleep disabled\" chip renders in the footer posture block\n (the danger-mode idiom) whenever power.keepAwake holds, read live from the\n PowerManager each render so the toggle reflects at o\n[…]\nonest hard cap.\n\nRender tests for the chip at 80x24 and 60 columns (both states), status-line\ntests for both states incl. the verbatim lid-split, /power toggle tests, and a\npower-settings-domain test.",
"is_bot": false,
"headline": "power surfaces: the \"sleep disabled\" chip, held-because reasons, the …",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T09:24:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "04273e8bf824d81be340d0a3ea12ed5cf49d8697",
"body": "Messages typed while a turn streams queue until it finishes. The composer now\nrenders them as a numbered EDITABLE list (createQueuedMessageList) with an\naffordance header, and a new /queue command lists, edits, and deletes still-\nundelivered messages through the SDK's editQueuedMessage / deleteQueue\n[…]\n and the verbs refuse an edit/delete of anything already gone.\n\nRender tests at 80x24 and 60 columns; command tests for list/edit/delete,\nthe delivered-is-immutable refusal, and out-of-range handling.",
"is_bot": false,
"headline": "queued mid-turn messages: an editable list, edit/delete until delivery",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T09:15:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "50093a075deac418d234331860e82cc32188c0e4",
"body": "…/consolidation/live-turn services\n\nRe-linked from a5c63e3b to sdk a03bf218 (fresh git-archive of the commit, built,\nall ten packed into a new durable tarball dir; old dir removed; bun.lock\nregenerated after a cache clear). a03bf218 closes the ./platform/power,\n./platform/relay, and ./platform/versi\n[…]\n-save gate.\n\nfleet-read-model: KIND_TAGS gains the 'observed-external' ProcessKind label\n(observed foreign coding agents; full rendering follows).\n\nFoundation artifacts re-exported. tsc --build green.",
"is_bot": false,
"headline": "dev-link: re-link to sdk a03bf218; adopt per-session recovery + power…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T09:11:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "547fbc36c53995d1748cbd430f2d6ad05df73b2d",
"body": "…renders structurally\n\nA key on a running tool call (Alt+C by default) cancels JUST that call via the\nin-process orchestrator's cancelToolCall — the local-session equivalent of the\nsessions.toolCalls.cancel wire verb — leaving the turn to continue. The\ncancelled call settles as a structured \"cancell\n[…]\n distinct \"cancelled\" block preserving the partial output, not a generic\n \"tool result\" or a hard error.\n\nFull-string render tests at 80x24 and 60 columns; target-selection and\nkeybinding unit tests.",
"is_bot": false,
"headline": "per-tool cancel: a key stops the running tool call, cancelled result …",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T07:33:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "78dc782b4c4941aa94e0425a054ceadd40841a40",
"body": "… the 4,000-char slice\n\nThe diff subcommand sliced git's raw text at 4,000 chars and printed a\n\"(diff truncated)\" stub — a recorded monument to a capped surface. It now\nfetches the FULL working-tree diff through GitService.diffStructured (parsed\nper-file/per-hunk, no size limit) and routes it into t\n[…]\nength renders complete. Render tests at 80x24 and 60 columns\nassert the full retained line count and the absence of any truncation stub;\na command test drives a >4,000-char change through a real repo.",
"is_bot": false,
"headline": "/git diff: route the full structural diff into the diff panel, delete…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T07:20:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "59d0d1b2c0ae69d9d88f33a1177c34dccf8c8d9a",
"body": "…rbs, power, task graph)\n\nFresh git-archive extraction of sdk a5c63e3b (never the working tree — a\nwriter may be active there), built and packed all ten packages into a new\ndurable tarball dir; old 64c67eaf dir removed; bun.lock regenerated after a\ncache clear. Verified in the installed package befo\n[…]\n.* config keys, fleet.graph.get,\nfleet.maxSize with migrateFleetMaxSize legacy migration, and the memory\nconsolidation scheduler receipts. Foundation artifacts re-exported for the\nround's verb growth.",
"is_bot": false,
"headline": "dev-link: re-link to sdk a5c63e3b (per-tool cancel, queued-message ve…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T07:09:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c48997e7bd169ea0169e749259c9f7dff3cc9e5f",
"body": "…a command\n\nThe fleet panel gains an ACP spawn affordance: 'n' lists the third-party coding\nagents the daemon discovered (acp.agents.list — read-only; a quiet, honest\nabsence when none), you pick one, then pick a working directory from the known\ncandidates (the current dir + the registered workspace\n[…]\nt a mocked daemon, the\nstructured-failure render, and the acp-agent attention classification.\n\nNew tarball dir already pinned in the dev-link commit; command reference\nregenerated for the new command.",
"is_bot": false,
"headline": "fleet: host third-party ACP agents as fleet rows, from the panel and …",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T03:38:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2de952b92cd5014ac8e740f2b52d8c691f34593e",
"body": "…as one action\n\nEvery pairing surface (modal, gv pair, daemon banner) now renders the honest\nTLS/capability posture the SDK computes, never a locally-authored string. The\none honest LAN line is the SDK's LAN_PLAIN_HTTP_NOTICE verbatim, present only\nwhen the posture carries it (plain http on a privat\n[…]\ne truth (http-on-LAN supported with stated\nconsequences, PWA needs TLS, tailscale recommended with a worked example, the\ndaemon never mints certificates). Full-string render tests at 80x24 and 60-col.",
"is_bot": false,
"headline": "pairing: LAN posture rendered honestly from the SDK, tailscale serve …",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T03:27:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e0d548f9c9d1e858e8a19f98a0f1e09a939771ec",
"body": "Fresh git-archive extraction of sdk 64c67eaf (never the working tree — a\nwriter is active there), built and packed all ten packages into a new\ndurable tarball dir; old d07b49e8 dir removed; bun.lock regenerated after\na cache clear. Verified in the installed package before coding:\npairing.posture.get\n[…]\nist / acp.sessions.create,\nFleetNodeKind 'acp-agent', session kind 'acp', and the exported\nLAN_PLAIN_HTTP_NOTICE wording. Operator-contract foundation artifact\nregenerated for the round's verb growth.",
"is_bot": false,
"headline": "dev-link: re-link to sdk 64c67eaf (LAN http posture, acp hosting)",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T03:09:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ee4c8f511e54faa496b2fd1bcfe93c3a3fb6077f",
"body": "ProcessNode.raw is `unknown`, so the merge-conflict fixture needs no cast at all\n— the object literal is assignable directly. Removes the explicit-any the\narchitecture identifier gate flagged.",
"is_bot": false,
"headline": "test: drop the forbidden any cast in the conflict-files detail fixture",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T02:51:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1573e2d04896a100f2858146a148051b61ece1dc",
"body": "The context-free resolveOperatorRpc split eagerly resolved the home directory in\ngetOperatorRpc's wrapper, which threw \"shell paths not wired\" for a\ndisabled-daemon context before the honest daemon-disabled / no-base-URL refusals\ncould return. Take homeDirectory as a value OR a thunk and resolve it only after\nthose static checks pass; getOperatorRpc now passes a lazy getter. Restores the\nearly-return honesty every /ci, /cost, /channel, /principals, /health path\ndepends on.",
"is_bot": false,
"headline": "operator-rpc: resolve shell paths lazily, after the static refusals",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T02:50:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60c9d177af0017f7c608b3070b2ffa3a6047cd5d",
"body": "The waiting-on-human rows now ACT, no id ever typed — a new FleetActs controller\n(fleet-acts.ts) owns the flows so fleet-panel.ts stays under the 800-line cap and\nonly delegates the trigger keys, the picker input, and the picker render.\n\nPick (the flagged workstream row, needsAttention 'pick'): Ente\n[…]\ncard chip. Full controller coverage against a mocked daemon (preview->confirm\nround-trip, stamped-id jump, discard receipt, honest degrade), conflict-files\ndetail render at 60 cols, and the new hints.",
"is_bot": false,
"headline": "fleet: the pick, conflict, and discard rows act from the panel selection",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T02:39:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c58becd0470f68bf0d63e76c8c30970e1bf77f0e",
"body": "…or invoke path\n\noperator-rpc grows a context-free core (resolveOperatorRpc) taking just the\nconfig manager + home directory; getOperatorRpc now delegates to it. This lets\nthe Fleet panel reach the SAME control-plane daemon the command layer does,\nthrough the SAME generic sdk.operator.invoke path — \n[…]\nn namespaced node ids (workstream:<id> /\nwork-item:<id>). createFleetGateway returns an honest unavailable reason when no\ndaemon is reachable so an act refuses cleanly instead of throwing into render.",
"is_bot": false,
"headline": "fleet gateway: the pick/conflict/discard verbs over the shared operat…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T02:39:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cb150d8e22e258efad3f351e1372d64e0fc0a2c4",
"body": "…here\n\nThe fleet read-model already routes every node with a needsAttention projection\nthrough the ONE waiting-on-human class (same ⚑ glyph, same jump key 'b', same\nblockedNodeIds count), so a ready best-of-N pick (reason 'pick', carried on the\nworkstream node) and a merge conflict (reason 'conflict\n[…]\n ask does).\n\nFull-string render tests at 80x24 and 60 columns for pick and conflict (matching\nthe existing approval/input goldens), plus count/jump-membership and detail-slot\ncoverage for all reasons.",
"is_bot": false,
"headline": "fleet: waiting-on-human inherits the pick and conflict reasons everyw…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T02:19:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5d4d40d45a4182a176a280bbbc1ee0976f3d7220",
"body": "…flicts, worktree discard)\n\nRe-snapshotted the SDK at d07b49e8 via `git archive` (never its live working\ntree — a writer is active there), built it, and packed all ten packages into a\nnew durable pin dir ~/.claude/jobs/e28eaafb/tmp/tarballs-tui-d07b49e8/,\nrepointing all twelve file: references (two \n[…]\nedCommit/\ndiscardedAt/detail); and the seeded-session stamping seam (routes/fleet\nstampConflictSession + startResolutionSession). tsc clean; the round's fleet\ntests pass against the relocated install.",
"is_bot": false,
"headline": "dev-link: re-link to sdk d07b49e8 (fleet waiting-on-human: picks, con…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T02:19:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fd3c1ad86e15181033d75af30032e92b4df007ce",
"body": "… job dir\n\nThe packed SDK tarballs lived under /tmp, which is tmpfs (a reboot wipes it)\nand inside routine scratch-cleanup blast radius — the next fresh install would\nENOENT on every file: pin. Relocated all ten tarballs to\n~/.claude/jobs/e28eaafb/tmp/tarballs-tui-3bddf143/ (the same durable job dir\n[…]\nled package still serves the pairing.handoff.* /\npairing.tokens.* verbs and the blockedEscalation* / agents.maxTurns config\nkeys; tsc clean and the round's 77 tests pass against the relocated install.",
"is_bot": false,
"headline": "dev-link housekeeping: move the tarball pins off tmpfs to the durable…",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T01:59:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "080667301c4272f02533c153a1125f7fd26c2077",
"body": "The shared pairing helpers (stable-host, pairing-handoff, pairing-offers,\npairing-origin, pairing-devices) moved from src/cli/ to src/core/: the shell-UI\nlayer (panels/input) must not import CLI entrypoints, and these are imported by\nthe pairing modal, the devices modal/command, and builtin-modals. \n[…]\n8 boundary rules, internal-\nidentifier rule included); workflows 3/3, 0 problems; perf all budgets PASS\n(startup 17.7ms/50, frame p95 0.51/16, p99 1.33/10); full suite 786 files, 786\npassed, 0 failed.",
"is_bot": false,
"headline": "gates: relocate shared pairing modules to core, hold the 800-line cap",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T01:57:41Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a8fe4ec790836b4179354ceae67891691a147fa6",
"body": "STEP 5a — the notifications.blockedEscalationGraceMs / …FollowUpMs /\n…MaxFollowUps keys surface in the notifications settings domain straight from\nthe SDK schema (the settings modal buckets every notifications.* key there),\neach with its real numeric option shape (typed integer with a bounded range)\n[…]\nLOW_CHAIN_FAILED, and wrfc-persistence only\ndebounces a snapshot write on it (self-healing as members' own terminal events\narrive) — so the quiescence-signal clause does not apply and nothing changed.",
"is_bot": false,
"headline": "blocked-too-long settings + honest turn-budget outcomes",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T01:41:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "47b568c16bc7d9412fe078c5591f1957750e0634",
"body": "Pairing surfaces now present the offer set (notifications / relay / passkey)\nwith a plain-language consequence per item and one honest http-on-LAN posture\nline, each offer declinable in the web app, and every pairing mints its own\nnamed token whose name is shown (and editable later) — already carrie\n[…]\ne and the\nshared-token line in full — wrapped, never clipped — at 80x24 and 60 columns;\ncommand + formatter + action tests cover the verbs. Security-modal golden\nregenerated for the new footer action.",
"is_bot": false,
"headline": "pairing bundle UX + a device manager in the security domain",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T01:33:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3735b46ef9d062a7938d69dae453f8f2f54cd5f7",
"body": "STEP 2 — every device-pairing producer now mints through the canonical\nhand-off and encodes the SDK's `#pair=<token>` deep link instead of a raw\nJSON connection blob: a camera scan opens the web app already signed in.\nRewired producers: the `gv pair` CLI (invokes the pairing.handoff.create\nverb), th\n[…]\ns, the\norigin set-once/never-clobber/never-freeze-DHCP rules, the mint helper's link\nshape (round-tripped through the SDK parser), and the modal's deep-link QR +\noffer set + posture with no JSON blob.",
"is_bot": false,
"headline": "pairing: the QR is the deep link, on a name that survives a lease change",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T01:22:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1a48f14896f82f54307503a492e9451cab30b4af",
"body": "Fresh git-archive snapshot of the SDK at 3bddf143 (never the live working\ntree — a writer is active there), built and packed as all ten publish-\nequivalent tarballs, pinned through dependencies + overrides so every\ninter-package edge resolves to the local build (the sdk itself included).\nbun cache c\n[…]\nmposition root) and thread it into the ws-only gateway verb\nhandlers so pairing.tokens.* and pairing.handoff.* register over it. Operator\nfoundation artifact regenerated for the grown pairing surface.",
"is_bot": false,
"headline": "dev-link: adopt the SDK pairing hand-off + per-device token surface",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-14T01:01:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "960c529853d282a8aadc3953632c2a28fb92437a",
"body": "…version in the connection banner\n\nA compiled standalone daemon now self-promotes at its first idle moment\n(installs its service unit and exits 0, handing over to the supervised\ninstance). In the smoke that moment arrives right after startup, so the\ndaemon died between the readiness poll and the hea\n[…]\nse it\nvalidates that the binary boots and serves HTTP, not service adoption.\n\nAlso pass this binary's real version to the companion connection banner,\nwhich otherwise printed the SDK's v0.0.0 default.",
"is_bot": false,
"headline": "Fix the daemon post-build smoke against service boot promotion; real …",
"author_name": "Mike Davis",
"author_login": "mgd34msu",
"committed_at": "2026-07-13T23:39:07Z",
"body_truncated": true,
"is_coding_agent": false
}
],
"releases_count": 100,
"commits_last_year": 1631,
"latest_release_at": "2026-07-18T01:21:19Z",
"latest_release_tag": "v1.19.5",
"releases_from_tags": false,
"days_since_last_push": 5,
"active_weeks_last_year": 18,
"days_since_latest_release": 5,
"mean_days_between_releases": 0.7
},
"community": {
"has_readme": true,
"has_license": false,
"has_description": true,
"has_contributing": false,
"health_percentage": 28,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "@pellux/goodvibes-tui",
"exists": true,
"license": "MIT",
"keywords": [
"goodvibes",
"tui",
"bun",
"daemon",
"control-plane",
"automation",
"ai"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@pellux/goodvibes-tui",
"is_deprecated": false,
"latest_version": "1.19.5",
"repository_url": "https://github.com/mgd34msu/goodvibes-tui",
"versions_count": 140,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 6647,
"first_published_at": "2026-04-15T02:28:05.590000Z",
"latest_published_at": "2026-07-18T01:24:15.639000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 5
}
]
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0,
"collected_at": null
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": true,
"bootstrap_files": [],
"api_schema_files": [
"docs/foundation-artifacts/knowledge-graphql.graphql"
],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 137129,
"source_files_sampled": 1506,
"oversized_source_files": 7,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"package.json"
],
"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": [
"npm"
],
"dependencies": [
{
"name": "@agentclientprotocol/sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.16.1"
},
{
"name": "@anthropic-ai/bedrock-sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.28.1"
},
{
"name": "@anthropic-ai/sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.82.0"
},
{
"name": "@anthropic-ai/vertex-sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.16.0"
},
{
"name": "@ast-grep/napi",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.42.0"
},
{
"name": "@aws/bedrock-token-generator",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.0"
},
{
"name": "@pellux/goodvibes-sdk",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "1.11.4"
},
{
"name": "@pellux/goodvibes-terminal-shell",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "1.11.4"
},
{
"name": "bash-language-server",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^5.6.0"
},
{
"name": "fuse.js",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^7.1.0"
},
{
"name": "graphql",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^16.13.2"
},
{
"name": "jszip",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.10.1"
},
{
"name": "node-edge-tts",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.2.10"
},
{
"name": "openai",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^6.29.0"
},
{
"name": "pyright",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.1.408"
},
{
"name": "simple-git",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^3.33.0"
},
{
"name": "sql.js",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^1.14.1"
},
{
"name": "sqlite-vec",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.1.9"
},
{
"name": "tree-sitter-css",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.25.0"
},
{
"name": "tree-sitter-javascript",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.25.0"
},
{
"name": "tree-sitter-json",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.24.8"
},
{
"name": "tree-sitter-python",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.25.0"
},
{
"name": "tree-sitter-typescript",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.23.2"
},
{
"name": "typescript-language-server",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^5.1.3"
},
{
"name": "vscode-langservers-extracted",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^4.10.0"
},
{
"name": "web-tree-sitter",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.26.7"
},
{
"name": "zustand",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^5.0.12"
}
],
"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": 1,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 1
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "mgd34msu",
"commits": 1601,
"avatar_url": "https://avatars.githubusercontent.com/u/18431027?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 30,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.982
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"release.yml",
"windows-beta.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"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": 0,
"reason": "license file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 5,
"reason": "dependency not pinned by hash detected -- score normalized to 5",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 8,
"reason": "2 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "6393d1fb41dd5c396995a038c7f3b0bc7c9ba45e",
"ran_at": "2026-07-23T10:53:21Z",
"aggregate_score": 4.3,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-18T01:25:06Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-01T02:26:25Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/mgd34msu/goodvibes-tui",
"host": "github.com",
"name": "goodvibes-tui",
"owner": "mgd34msu"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 53,
"inputs": {
"security": 43,
"vitality": 82,
"community": 25,
"governance": 44,
"engineering": 66
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 82,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"commits_last_year": 1631,
"human_commit_share": 1,
"days_since_last_push": 5,
"active_weeks_last_year": 18
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 5 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 5
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "18/52 weeks with commits",
"points": 12.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 18
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "1631 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 1631
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 100,
"latest_release_tag": "v1.19.5",
"releases_from_tags": false,
"days_since_latest_release": 5,
"mean_days_between_releases": 0.7
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "100 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 100
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 5 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 5
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~0.7 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 0.7
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"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": "critical",
"name": "Community & Adoption",
"value": 25,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 0,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "0 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 0
}
}
],
"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": "critical",
"name": "Community health",
"note": null,
"notes": [],
"value": 25,
"inputs": {
"has_readme": true,
"has_license": false,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "no license file detected",
"points": 0,
"status": "missed",
"details": [
{
"code": "license_absent",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 64,
"inputs": {
"packages": [
"@pellux/goodvibes-tui"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 6647
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "6,647 downloads/month across npm",
"points": 51,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 6647,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 44,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.982
},
"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 98% of commits",
"points": 0.4,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 98
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"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": "at_risk",
"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": 36,
"inputs": {
"merged_prs": 1,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 1
},
"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": "1/2 decided PRs merged",
"points": 19.1,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 1,
"decided": 2
}
}
],
"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": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 43,
"inputs": {
"followers": 1,
"owner_type": "User",
"is_verified": null,
"owner_login": "mgd34msu",
"public_repos": 22,
"account_age_days": 3753
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "1 followers of mgd34msu",
"points": 2.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 1,
"login": "mgd34msu"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "22 public repos, account ~10 yr old",
"points": 21.9,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 22
}
},
{
"code": "account_age_years",
"params": {
"years": 10
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"@pellux/goodvibes-tui"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 5
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 5 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 5
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "140 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 140
}
}
],
"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": "moderate",
"name": "Engineering Quality",
"value": 66,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 43,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"packaging"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 43,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 4.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": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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 not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 5",
"points": 2.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "2 existing vulnerabilities detected",
"points": 6,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "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": 2
},
"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": "moderate",
"name": "AI Readiness",
"value": 57,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.96,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "96 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 96,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 38,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 5",
"points": 5,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 137129,
"source_files_sampled": 1506,
"oversized_source_files": 7
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "7/1506 source files over 60KB",
"points": 54.7,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 1506,
"oversized": 7
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "excellent",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"api_schema_files": [
"docs/foundation-artifacts/knowledge-graphql.graphql"
]
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": "docs/foundation-artifacts/knowledge-graphql.graphql",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "docs/foundation-artifacts/knowledge-graphql.graphql"
}
}
],
"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": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"deps.dev does not index npm:@pellux/goodvibes-tui@1.19.5; advisories assessed against the repository dependency graph instead"
],
"report_type": "repository",
"generated_at": "2026-07-23T10:53:27.899084Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/mgd34msu/goodvibes-tui.svg",
"full_name": "mgd34msu/goodvibes-tui",
"license_state": "absent",
"license_spdx": null
}