Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [
"claude-code",
"golang",
"mcp",
"nix-flake",
"package-framework",
"plugin-system",
"rust"
],
"is_fork": false,
"size_kb": 4458,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 1890187,
"Lua": 812,
"MDX": 2288531,
"Nix": 51260,
"Just": 32395,
"Roff": 46916,
"Shell": 27759,
"TypeScript": 267124
},
"pushed_at": "2026-07-29T13:41:29Z",
"created_at": "2026-02-14T16:09:44Z",
"owner_type": "Organization",
"updated_at": "2026-07-29T13:43:37Z",
"description": "Nix package framework plus the go-mcp and dewey Go libraries: build self-describing, composable CLI/MCP-server/skill packages for agentic tooling — read-only mirror of code.linenisgreat.com/purse-first",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "master",
"license_spdx_raw": "MIT",
"primary_language": "MDX",
"significant_languages": [
"MDX",
"Go"
]
},
"owner": {
"blog": "amarbel.net",
"name": "amarbel llc",
"type": "Organization",
"login": "amarbel-llc",
"company": null,
"location": "United States of America",
"followers": 0,
"avatar_url": "https://avatars.githubusercontent.com/u/260668089?v=4",
"created_at": "2026-02-10T12:45:42Z",
"is_verified": null,
"public_repos": 56,
"account_age_days": 169
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.4.1",
"kind": "patch",
"published_at": "2026-07-03T14:21:23Z"
},
{
"tag": "v0.3.4",
"kind": "patch",
"published_at": "2026-06-19T17:00:53Z"
},
{
"tag": "v0.3.3",
"kind": "patch",
"published_at": "2026-06-19T14:30:02Z"
},
{
"tag": "v0.3.2",
"kind": "patch",
"published_at": "2026-06-11T11:43:09Z"
},
{
"tag": "v0.3.1",
"kind": "patch",
"published_at": "2026-06-08T00:00:25Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2026-06-06T22:05:12Z"
},
{
"tag": "v0.2.9",
"kind": "patch",
"published_at": "2026-06-04T18:14:07Z"
},
{
"tag": "v0.2.8",
"kind": "patch",
"published_at": "2026-06-01T00:41:11Z"
},
{
"tag": "v0.2.7",
"kind": "patch",
"published_at": "2026-05-31T23:19:51Z"
},
{
"tag": "v0.2.6",
"kind": "patch",
"published_at": "2026-05-31T01:43:44Z"
},
{
"tag": "v0.2.5",
"kind": "patch",
"published_at": "2026-05-29T12:11:56Z"
},
{
"tag": "libs/dewey/v0.2.4",
"kind": "other",
"published_at": "2026-05-27T21:14:23Z"
},
{
"tag": "v0.2.3",
"kind": "patch",
"published_at": "2026-05-26T20:27:05Z"
},
{
"tag": "v0.2.2",
"kind": "patch",
"published_at": "2026-05-25T11:19:25Z"
},
{
"tag": "libs/dewey/v0.2.2",
"kind": "other",
"published_at": "2026-05-25T11:19:12Z"
},
{
"tag": "libs/dewey/v0.2.1",
"kind": "other",
"published_at": "2026-05-24T18:05:53Z"
},
{
"tag": "libs/dewey/v0.2.0",
"kind": "other",
"published_at": "2026-05-23T21:39:29Z"
}
],
"recent_commits": [
{
"oid": "c1ced82d4ee85784a718a7130c7c3960e7d692b1",
"body": "A filename broken across a line read as \"printer_null_ test.go\", and the\ndiscard-surface comment still claimed js has no /dev/null handle -- which the\nnode-hosted run disproves, and which the file's own header already corrects.\n\n:clown: Clown 0.4.2+a662dea\nhttps://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
"is_bot": false,
"headline": "dewey/ui: fix two inaccurate comments in the Null wasm test",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-29T13:34:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56bf3104f49d69838b473693311a36c464375b72",
"body": "internal/charlie/ui opened os.DevNull in a package init() and panicked on\nfailure. Anywhere the open fails, that killed the binary during package\ninitialization, before main() ran -- taking down every js/wasm module whose\nimport graph reached this package. Found downstream in papi#62, whose\nbrowser-\n[…]\nw covers\ninternal/charlie/ui and pkgs/ui, both of which cross-build clean.\n\nCloses #177\n\n:clown: Clown 0.4.2+a662dea\nhttps://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
"is_bot": false,
"headline": "dewey/ui: lazy-init Null's /dev/null handle so js/wasm can import it",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-29T13:33:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "439984ec862889e0c436c268785a070c9b2398a6",
"body": "Separate from the #173 SIGHUP fix, and dropping this commit leaves that\nfix intact.\n\nFound while verifying #173: once SIGHUP was resolved, GOOS=js still\nfailed on `internal/delta/files/chflags.go: undefined: setUserChanges`.\n#172 added a wasip1-only stub, but the underlying gap — chflags.go\ndispatch\n[…]\nVerified: the widened default list builds clean for both GOOS=js and\nGOOS=wasip1 at GOARCH=wasm.\n\nRefs #172\n\n:clown: https://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
"is_bot": false,
"headline": "dewey/files: add js stub for setUserChanges",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-29T10:41:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8676091c70292002c70cb76d8b8a3db523448500",
"body": "`ContextSetCancelOnSIGHUP` referenced `syscall.SIGHUP`, which GOOS=js\ndoes not define — syscall_js.go declares only SIGCHLD, SIGINT, SIGKILL,\nSIGTRAP, SIGQUIT and SIGTERM. Every package reaching dewey's errors\ncontext (a wide surface) therefore failed to build for js/wasm.\n\nMove only that function i\n[…]\nt-dewey` passes natively with no\nfailures, including TestContextSignal's real SIGHUP delivery.\n\nCloses #173\n\n:clown: https://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
"is_bot": false,
"headline": "dewey/errors: build-tag SIGHUP out for js/wasm",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-29T10:41:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "25389a78677704fe951de1627ad161ce17cd9a81",
"body": "`chflags.go` calls setUserChanges via platform-specific files with no\nstub for GOOS=wasip1, so any package importing pkgs/files (or reaching\nit transitively) fails to build for wasm/wasi. Mirror the existing\nchflags_linux.go no-op convention (filename-suffix build constraint,\nno explicit //go:build \n[…]\nsue (internal/bravo/errors/context.go: undefined:\nsyscall.SIGHUP) — out of scope for this fix.\n\nCloses #172\n\n:clown: https://code.linenisgreat.com/clown/commit/a662deac4fd13627f138f08ccc691bd353e83fc1",
"is_bot": false,
"headline": "dewey/files: add wasip1 stub for setUserChanges",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-29T09:58:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "81bb9459712117bc554b47b53e6c63ba2e8a8cc9",
"body": "Lowercase the pre-existing single-line descriptions and drop their\ntrailing periods, so the --list column reads as one uniform list\nrather than two styles side by side. Where such a comment was two\nsentences, the extra sentence moves above a bare `#` separator.\n\nAlso rewrite descriptions that satisf\n[…]\nnot. The linter checks that a\nsummary stands alone, never that it says anything.\n\nSigned-off-by: Clown 0.4.2+0201796\nhttps://code.linenisgreat.com/clown/commit/02017963c3ed4f5a3354c7d2ccfcd5305695142e",
"is_bot": false,
"headline": "justfile: normalize --list summary style",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-28T14:34:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7d0b832eca308eca3daefe701437c3ca4d184f35",
"body": "`just --list` shows only the last comment line above a recipe, so\nmulti-line comment blocks were surfacing their tail as the\ndescription. Insert a bare `#` separator above a written one-line\nsummary, per conformist-justfile(7) RECIPE DESCRIPTIONS. Prose is\npreserved above the separator.\n\nSigned-off-by: Clown 0.4.2+0201796\nhttps://code.linenisgreat.com/clown/commit/02017963c3ed4f5a3354c7d2ccfcd5305695142e",
"is_bot": false,
"headline": "justfile: give every recipe a standalone --list summary",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-28T14:12:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d93c2594fa7eeb9b6b4adc0992e3aa7c6de1bddc",
"body": "…st#171)\n\nA clean check now says so explicitly in both exporters — Go:\n\"pkgs/ in sync with internal/ (N facade files checked)\"; rust mode\nmirrored — so green output is distinguishable from a compare that\nsilently never ran (the masked-skip suspicion that forced eng's #44\nmutation test). diffFacadeTr\n[…]\nated:\" lines for one file read\nas a bug.\n\ngo build + dagnabit/dagnabit_rust test suites + checks.formatting green.\n\nSigned-off-by: Clown 0.3.22+dirty <https://code.linenisgreat.com/clown/commit/dirty>",
"is_bot": false,
"headline": "dagnabit: print a positive verdict on clean export --check (purse-fir…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-22T20:42:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dbe6d87fc660ea8f673df38d8d7895699cc7b446",
"body": null,
"is_bot": false,
"headline": "bump transitive flake inputs",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-21T16:15:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "679aa4bad05b7f4c2c72abc4a10b572083a825a4",
"body": "…ep #20)\n\nFollow-up: one missed gomod2nix fork link in CLAUDE.md.\n\nSigned-off-by: Clown 0.3.22+dirty <https://code.linenisgreat.com/clown/commit/dirty>",
"is_bot": false,
"headline": "docs: repoint living-doc URLs to code.linenisgreat.com (fleet doc swe…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-20T20:49:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86273c2a8c3bac05c2d1a0decb640fc1a73c1f08",
"body": "…ep #20)\n\nSigned-off-by: Clown 0.3.22+dirty <https://code.linenisgreat.com/clown/commit/dirty>",
"is_bot": false,
"headline": "docs: repoint living-doc URLs to code.linenisgreat.com (fleet doc swe…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-20T20:42:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "20f89c28ebf95f9ed6bab2f13101d7af8d27cb03",
"body": "…reat.com/purse-first\n\nWave-3 leg A2 (docs/plans/2026-07-19-go-module-rename-playbook.md): rename\nall five purse-first Go modules in one commit via the PREFIX pair\ngithub.com/amarbel-llc/purse-first -> code.linenisgreat.com/purse-first\n(root, libs/dewey, libs/go-mcp, libs/go-mcp/command/huh,\ncmd/gol\n[…]\nE_FIRST_VERSION 0.4.1 -> 0.5.0 (minor bump for the\n rename; tagged below alongside libs/dewey and libs/go-mcp).\n\n🤡 Generated with Clown 0.3.22+dirty (https://code.linenisgreat.com/clown/commit/dirty)",
"is_bot": false,
"headline": "rename Go modules github.com/amarbel-llc/purse-first -> code.linenisg…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-20T15:34:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6e671d48fc4723b5680109ca33361b96fec341a3",
"body": "…fig to dagnabit's nested pass\n\nThe check/repair scripts `cd \"${deweyDir}\"` before invoking dagnabit's\nown conformist-driven facade-format pass, so that pass's tree root is\nalready deweyDir. Consumers whose Go module lives in a subdirectory\n(deweyDir != repo root) commonly set `programs.goimports.wo\n[…]\n purse-first pin. chrest gets the analogous\npropagation via a purse-first bump — see the follow-up commit there.\n\n🤡 Generated with Clown 0.3.22+dirty (https://code.linenisgreat.com/clown/commit/dirty)",
"is_bot": false,
"headline": "nix/linters/dewey-facade-export: strip working-dir before feeding con…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-19T23:06:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "16a16aadb3247a64e3d284a76725cf9673eb2834",
"body": null,
"is_bot": false,
"headline": "bump transitive flake inputs",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-17T23:42:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46752e9f7643d1a9d9c1a6cc6e443d0e24e8c67d",
"body": "The facade formatter's treefmt escape hatches — exec a bare `treefmt`\non finding treefmt.toml, `nix fmt` on treefmt.nix — were only\nreachable against bats and chrest, and both flipped to conformist\ntoday (bats 6f57aff, chrest efcf350). Dead code now:\n\n- exporter_treefmt.go → exporter_conformist.go (\n[…]\n --check drift-free (only unexported identifiers\nremoved, so pkgs/ needed no regen).\n\n:clown: Clown 0.3.22+1cb8383 — https://code.linenisgreat.com/clown/commit/1cb8383ef3006e1179952e14c7031d8ec2dc127e",
"is_bot": false,
"headline": "dagnabit: delete the treefmt fallback (eng#246)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-17T18:13:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9f5250b136e6ac8e547913ce6b2bdee0dc854720",
"body": "The fleet is forge-canonical (FDR-0016): origins point at\ncode.linenisgreat.com and GitHub is a read-only push mirror, so\n`gh release create` both errors against the non-GitHub remote and\nwould put the canonical release artifact on the mirror. Swap to\nforgejo-cli: `fj release create <NAME> --tag <ta\n[…]\ne-path\ncomments/docs updated to match; deliberately GitHub-facing tooling\nuntouched.\n\n:clown: Clown 0.3.22+1cb8383 — https://code.linenisgreat.com/clown/commit/1cb8383ef3006e1179952e14c7031d8ec2dc127e",
"is_bot": false,
"headline": "release: cut releases on the forge via fj, not gh (eng#245)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-17T17:41:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d5312da3d7350824951db0baabb3b34ec6caa13a",
"body": "conformist: 2099b7b → ?\ngomod2nix: f253033 → ?\nigloo: e04bba9 → ?",
"is_bot": false,
"headline": "bump flake inputs: conformist, gomod2nix, igloo",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-17T01:49:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c7eac281a28cc52303f920839dc8862b820b5c6",
"body": null,
"is_bot": false,
"headline": "bump transitive flake inputs",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-16T11:37:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d3361cbfd0828b34b77d5eea622b0a721b3fdfb",
"body": "conformist: ffaed59 → 2099b7b",
"is_bot": false,
"headline": "bump flake inputs: conformist",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-15T10:42:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e15e981e7494ce0286a7cb279bbda083f726b19",
"body": "conformist: 1985c0c → ffaed59",
"is_bot": false,
"headline": "bump flake inputs: conformist",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-14T14:22:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f3ad3d58f15005c5caf0e32e85a1d48655ed25d6",
"body": null,
"is_bot": false,
"headline": "bump transitive flake inputs",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-14T01:29:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6c645d3c2104e488f06cebc6ebcd635102090368",
"body": "conformist: 726b745 → 1985c0c\nigloo: 0dab674 → e04bba9",
"is_bot": false,
"headline": "bump flake inputs: conformist, igloo",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-13T13:46:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "19447183bfdb717c1990069cfa5cc68c82801fca",
"body": "igloo: d1c081d → 0dab674",
"is_bot": false,
"headline": "bump flake inputs: igloo",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-12T21:38:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bc7607f4234866c55381715c1c127282653543e9",
"body": "conformist: ef129f0 → 726b745",
"is_bot": false,
"headline": "bump flake inputs: conformist",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-07-07T23:19:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f5efdafee1c5cc81aba3239b3918994d432835e",
"body": "conformist: eb3ec70 → ef129f0\nigloo: 991d36f → d1c081d",
"is_bot": false,
"headline": "bump flake inputs: conformist, igloo",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-06T13:08:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50a465936c8bf265c935331b9678fe55cd63d6a9",
"body": "conformist: 56ea0df → eb3ec70\nigloo: e27cfa4 → 991d36f",
"is_bot": false,
"headline": "bump flake inputs: conformist, igloo",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-06T11:12:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b98141ab179ba22e5a3ace1b85e109c3e4bd656",
"body": "conformist: 14ce434 → 56ea0df\nigloo: 534b764 → e27cfa4",
"is_bot": false,
"headline": "bump flake inputs: conformist, igloo",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-06T03:26:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4bf4c5f2c090c18df70387b9f8b9739dbef52696",
"body": "… halves\n\nThe focused drift CHECK (debug-dewey-pkgs-drift) and the module lanes\nthread DAGNABIT_CONFORMIST_CONFIG + DAGNABIT_CEILING_DIRECTORIES, but\nthe two debug REPAIR recipes still invoked build/dagnabit bare — so a\nhand-run export formatted facades via the upward config walk, which in\na toml-le\n[…]\n Mirror the drift recipe's\nthreading so check and repair format identically.\n\nSigned-off-by: Clown 0.3.16+9d7b6e7 <https://github.com/amarbel-llc/clown/commit/9d7b6e79f3c317e0871419be6ae1ac3efcc8e124>",
"is_bot": false,
"headline": "debug-dewey-export{,-library}: thread the #159 config into the repair…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-05T10:44:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "400e71c34a4b903365cbc4c273947cc01146e535",
"body": "Part of the eng tier-B convergence (proven on madder: the pre-commit\ncodegen lane cannot heal a cascade bump commit because its store-pinned\ndriver predates the bump; the merge-repair phase, running against the\nrebuilt post-bump devshell, can — but only if the repo exposes its own\nhermetic repair ho\n[…]\nes.conformist-repair + on\nthe devShell PATH, mirroring the preCommit wiring.\n\nSigned-off-by: Clown 0.3.16+9d7b6e7 <https://github.com/amarbel-llc/clown/commit/9d7b6e79f3c317e0871419be6ae1ac3efcc8e124>",
"is_bot": false,
"headline": "expose build.repair (unpin conformist) for merge-time self-healing",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-04T11:26:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cb8b7676ea19f53332eaf9381fbe5629a5fefb34",
"body": null,
"is_bot": false,
"headline": "refresh flake.lock",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-03T14:38:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "685d086e8fc1141217bcd2226fb2ceb9d35ee408",
"body": null,
"is_bot": false,
"headline": "release v0.4.1",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-07-03T14:21:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "189806b6436f5aed6063f7343a30e9ec76c366f8",
"body": null,
"is_bot": false,
"headline": "refresh flake.lock",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-30T20:01:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1494bcc28e15ba4522bac5fb4ba0959e87d68227",
"body": null,
"is_bot": false,
"headline": "refresh flake.lock",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-28T15:04:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6773279733150c0ccac8242f335f7858c9172f7",
"body": null,
"is_bot": false,
"headline": "bump nixpkgs-master: d233902 → 567a49d",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-25T15:27:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42941ba6139457bd0777364ceab1358e458ab9a5",
"body": "Format staged content at authoring time so a `nix fmt` miss can never reach the\nmerge gate again — exactly the gap that let the #163 Step 2 nixfmt miss through.\n\n- flake.nix: expose `packages.conformist-pre-commit = conformistEval.config.build.preCommit`\n (the store-pinned `conformist --staged --ex\n[…]\noad) so the devShell\nexposes the hook command and spinclass re-installs the git hook.\n\n:clown: clown 0.3.14+295fae7\nhttps://github.com/amarbel-llc/clown/commit/295fae7bf5b2cb8a13578d2af6fc7e9984bc98bd",
"is_bot": false,
"headline": "feat(conformist): wire per-commit conformist repair hook",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-24T14:51:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c38be19e4f54721a63d8972fb2e3bedcf5c20594",
"body": "…ules (#163 Step 2)\n\nParameterize the two dewey conformist linter modules and expose them from\npurse-first's flake as `lib.conformistLinters.{dewey-facade-export,dewey-reposition}`\nso downstream dewey-layout repos (madder) can import them and drop their\nper-repo facade wrappers + recipes.\n\n- nix/lin\n[…]\nabit, delete dagnabitWrapped + codemod-facades/lint-facades). #163 stays open\nfor it.\n\n:clown: clown 0.3.14+295fae7\nhttps://github.com/amarbel-llc/clown/commit/295fae7bf5b2cb8a13578d2af6fc7e9984bc98bd",
"is_bot": false,
"headline": "feat(dewey): publish facade-export/reposition linters as reusable mod…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-24T14:29:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cf4834150c6c819d65636b198a5e2cce937a97fa",
"body": "Express `dagnabit export`'s facade-format pass as a first-class conformist\nwhole-tree linter, mirroring `nix/linters/dewey-reposition.nix`. Editing a\npublic symbol in `libs/dewey/internal/` without regenerating `pkgs/` now trips\na local lint signal instead of only surfacing at the merge gate.\n\n- nix\n[…]\necorded in FDR 0013; matches the sibling reposition linter.\n\nFDR 0013 → experimental.\n\n:clown: clown 0.3.14+295fae7\nhttps://github.com/amarbel-llc/clown/commit/295fae7bf5b2cb8a13578d2af6fc7e9984bc98bd",
"is_bot": false,
"headline": "feat(dewey): facade-export drift as a conformist module (#163)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-24T13:15:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8d3cce0683eaae563aebf73cbfbc799ed4e969ae",
"body": "Three related landings from today's conformist/dagnabit issue triage:\n\nProvenance (#165, #164, #118):\n- add `dagnabit version` subcommand printing dewey buildinfo\n- stamp version+commit into generated facade headers (Go + rust\n exporters), so a binary↔library skew surfaces as export drift\n (mirror\n[…]\ngn for the next landing.\n\nCloses #161\nCloses #162\nCloses #164\nCloses #165\nCloses #118\n\n:clown: clown 0.3.12+5ea26ec\nhttps://github.com/amarbel-llc/clown/commit/5ea26ec4b2cf0ec7c393bea642ec58aa9b871f78",
"is_bot": false,
"headline": "feat(dagnabit): provenance stamping + conformist wrapper hardening",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-19T16:49:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0a40b5e16a64a674dd708611cabe2b07612749a1",
"body": null,
"is_bot": false,
"headline": "release v0.3.3",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-19T14:29:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a56681b987e364083a11d77239df896d788fff05",
"body": "Two parts (purse-first#160):\n\n1. Reposition: `dagnabit reposition` reported internal/echo/dagnabit_rust as\n mis-positioned — its actual dependency depth puts it at bravo, not echo.\n Applied via `dagnabit internal` (8 files moved echo→bravo, import paths\n rewritten, the pkgs/dagnabit_rust facad\n[…]\nt-worktree.\n - CLAUDE.md / README.md: lint-lane descriptions updated.\n\nCloses #160.\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
"is_bot": false,
"headline": "fix(dewey): reposition dagnabit_rust echo→bravo + gate reposition drift",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-19T12:09:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "36c6cc7a832e4f8ae40e53fcea595e13ee1dc671",
"body": "…t config\n\ndagnabit's FormatOutput discovered the project formatter by walking UP from the\nmodule dir for a conformist.toml/treefmt.* config, to the filesystem root. After\na repo migrates to a Nix-generated conformist config (conformist.nix via\nevalModule, no conformist.toml on disk), the walk escal\n[…]\nvVar),\nso the vars are documented in the manpage + source doc comments.\n\nCloses #159.\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
"is_bot": false,
"headline": "fix(dagnabit): bound formatter-config walk + honor explicit conformis…",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-19T11:02:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "868f8d2f21fcfd3bfb42cf479a63fbbf4e0a3522",
"body": "… workaround\n\nconformist fixed two things upstream that purse-first was working around:\n- justfile-default's backslash-continued-aggregate false positive (now uses\n `just --dump --dump-format json` plumbing, with a regression fixture);\n- programs.shfmt gained a caseIndent option (defaults on) emitt\n[…]\ncanonical linters with zero local\nlinter copies and no formatter-option augmentation.\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
"is_bot": false,
"headline": "build(conformist): bump to 1b8e32d, drop local justfile-default + -ci…",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-18T21:22:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9ad27056dcc933e36432941d51151f105abd0ca2",
"body": "…formist's buggy one\n\nconformist's justfile-default linter (nix/linters/justfile-default.nix at\na8471278) decides whether a `default` dependency is an aggregate by awk-sniffing\nraw justfile text: it checks whether the dependency's next PHYSICAL line is\nindented. A backslash-continued aggregate (e.g.\n[…]\nname once conformist drops its version\n(coordination in flight; purse-first task #8).\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
"is_bot": false,
"headline": "feat(conformist): author correct justfile-default linter, disable con…",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-18T20:06:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f2f789248924c10c1b7d4af9b6ab21f38604736a",
"body": "…onformist.toml\n\nInvert the conformist<->purse-first dependency so conformist is strictly\nupstream with no cycle. conformist no longer consumes purse-first (it builds\ngolangci-lint-dewey from a pinned source FOD as of conformist master a8471278),\nso purse-first can now take conformist as a flake inp\n[…]\none false-positives\non backslash-continued aggregates), shfmt caseIndent upstreaming.\n\n:clown: clown 0.3.12+e27f901\nhttps://github.com/amarbel-llc/clown/commit/e27f9018663d8af8c5e523962063d9195883bf46",
"is_bot": false,
"headline": "build(conformist): consume conformist as upstream flake input, drop c…",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-18T19:50:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "00c193ed49b477fdf6c23450c35256c2251e3b72",
"body": null,
"is_bot": false,
"headline": "refresh flake.lock",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-11T18:05:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afbaee5ec8336a37caba0eef5ac4d67165ead278",
"body": "Design record for upstreaming madder's futility home to dewey as the\ndeclarative command framework that supersedes internal/echo/command and\ngo-mcp's command (the purse-first#63 mandate), synthesizing the dodder,\ncutting-garden, and madder forks' designs.\n\nCore design: the Run signature is the singl\n[…]\nts rejection rationale recorded in\nBackground to prevent relitigation.\n\n:clown: generated with Clown 0.3.10+44f75d5\nhttps://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be",
"is_bot": false,
"headline": "docs(fdr): FDR-0012 declarative command framework (futility → dewey)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-11T11:35:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f006f5fa947ea6d76cea7c3b2d74b84f17755913",
"body": null,
"is_bot": false,
"headline": "refresh flake.lock",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-10T01:23:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa45e64410f5bef63d26b09cbd563f36a2959d93",
"body": "Wire the dewey gclplugin analyzers (defererr/seqerror/repool/testui) over\ndewey's OWN packages via the golangci-lint-dewey custom binary, in a new\n`lint-dewey-self` recipe folded into the `lint` CI gate. Adds a root\n.golangci.yml: build-tags=test (test_ui.T lives behind //go:build test),\nand a testu\n[…]\nfull dewey suite\n(`just test-dewey`) green; `go vet -tags test` clean.\n\n:clown: generated with Clown 0.3.10+44f75d5\nhttps://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be",
"is_bot": false,
"headline": "feat(dewey): dogfood the dewey analyzers over dewey's own source",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-10T01:17:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5ac714b5426466c3aebca1d876d580048ed09093",
"body": "New go/analysis analyzer flagging stdlib *testing.T in function\nparams/results, interface methods, and struct fields, steering test\ncode toward dewey's test_ui.T (which embeds *testing.T and adds\nassertion/printing helpers).\n\nCanonical Go test entry points (free TestXxx funcs) are exempt — the\ntesti\n[…]\ne root CLAUDE.md flake-output list (which\npredated actx/paramobj too).\n\n:clown: generated with Clown 0.3.10+44f75d5\nhttps://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be",
"is_bot": false,
"headline": "feat(dewey): add testui analyzer (stdlib *testing.T -> test_ui.T)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-10T01:17:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9536b5d3494eaa9f803b81e1d1346a7bfa35eaa6",
"body": null,
"is_bot": false,
"headline": "release v0.3.1",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-10T01:17:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c5c92dd2c0ef0aac2b1286f71b0bf9de542fcea7",
"body": null,
"is_bot": false,
"headline": "refresh flake.lock",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-08T20:19:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8c4b12e3b8e01ea023af73961a4ca822c5c4624f",
"body": "conformist takes purse-first as an input (golangci-lint-dewey), so a\nconformist input here forms a cycle that unrolls igloo duplicates into\nevery consumer's lock graph (eng carried 9 igloo nodes through\npurse-first→conformist→purse-first chains). The edge was dev-only: the\n`nix fmt` wrapper and a de\n[…]\nne removed the 50+ unrolled nodes.\n\nRequested by the eng input-graph dedup session.\n\n:clown: Clown 0.3.10+44f75d5 (https://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be)",
"is_bot": false,
"headline": "build(flake): sever the conformist input (dev-only cycle edge)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T23:22:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dfb31b548661b48b9a490fb5bbdc32dc6a951c39",
"body": "The retryable Recover → abort path wrapped the caller's error in\nerrContextRetryAborted with no Unwrap, type-erasing it on the other\nside of ctx.Run — errors.Is/errors.As could not classify typed errors\n(dodder's lock-failure classification, dodder#249).\n\nTest-first: TestContextRetryAbortedPreservesErrorChain failed with the\nexact reported symptom, passes with the one-method fix.\n\n:clown: Clown 0.3.10+44f75d5 (https://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be)",
"is_bot": false,
"headline": "fix: errContextRetryAborted unwraps to the aborted error (closes #145)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T23:13:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "53e84476feee93ca1674e2de859754faff3acb42",
"body": "…ses #142)\n\nAll four langGo branches now resolve the module path and anchor\ngo_list.Reader / GitMover / Exporter at the rootDir that detectLanguage\nalready found, instead of re-requiring go.mod in the CWD — symmetric\nwith rust mode. Prefixes and package paths stay root-relative. Invoking\nfrom the mo\n[…]\ny containing go.mod\" before the fix). Manpage\nLANGUAGES paragraph updated to match.\n\n:clown: Clown 0.3.10+44f75d5 (https://github.com/amarbel-llc/clown/commit/44f75d56cb4c2d1c2558da8ceb2c0cd1032871be)",
"is_bot": false,
"headline": "fix: go mode honors the detected module root from subdirectories (clo…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T22:35:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "347fb63da1dfe8f482e6d0a0210e636191ef2929",
"body": "Records the feature's interface, honest limitations (incl. unverified\nmacro_export glob coverage and the two-language dispatch ceiling), and\nthe four tuning levers settled during implementation.\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "docs(fdr): FDR-0011 dagnabit rust mode",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T17:23:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "157f7b7d485b0122ccb4f950d274f2480ea9894c",
"body": "… tiers)\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "docs(dagnabit): document rust mode (manpage, flag help, dewey package…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T17:17:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b077dd78daa73320ebad4799de9f1dece9b73c86",
"body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "test(dagnabit): BATS lane for rust mode",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T16:55:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e37621af17a37e00b16defdb25e635499dab6a2c",
"body": "…writes\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "build(dagnabit): wrap binary with ast-grep on PATH for rust rename re…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T16:41:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7fb245e1e23f9ea8bc4a75fff8029707fd37917a",
"body": "…nd cargo check gates\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "feat(dewey/dagnabit_rust): crate move/rename with ast-grep rewrites a…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T16:32:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df83af59d1187535a5968b4dc9b3113b510fa5c7",
"body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "feat(dagnabit): rust export CLI wiring",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T15:21:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a1a71fbc7a51ee157a96247f5bab6bc959f649cd",
"body": "…ta directive and check mode\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "feat(dewey/dagnabit_rust): glob-facade exporter (pub use) with metada…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T15:01:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f16b20e1dd8c45a75062070cd483d3feea784c3c",
"body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "feat(dagnabit): language auto-detection and rust reposition wiring",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T14:40:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7b4ea73b3c0d48f09a99c23a32efee1b06b8f5b",
"body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "feat(dewey/dagnabit_rust): cargo workspace crate mover",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T13:47:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "422cb1ca8f60263b08a7c2232f0899694c7b1635",
"body": null,
"is_bot": false,
"headline": "refresh flake.lock",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-07T11:39:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5521b9f96fc5bdb753fa8bba053b79aa6f1a0ab",
"body": "…bit rust mode\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "feat(dewey/cargo_metadata): cargo-metadata DependencyReader for dagna…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T02:00:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0e89935f0bd5729449167d2dc87b5a6b4944019",
"body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "feat(dewey/cargo_manifest): comment-preserving span edits for Cargo.toml",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T01:36:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5b2690fa92c588793ea5d316b9a27e52c5e30bc",
"body": ":clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "feat(dewey/cargo_workspace): cargo workspace root discovery",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T01:06:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aea9e383101d7ff7be6a8def27bd10bc5aaa1dfc",
"body": "…gnabit rust mode\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "feat(devenvs): rust devshell (cargo, rustc, rustfmt, ast-grep) for da…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T00:44:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5ce161f408cdf7403eb0414134ddc925d69bace",
"body": "14 TDD tasks from the approved design: devshell, cargo_workspace /\ncargo_manifest / cargo_metadata / dagnabit_rust dewey packages, CLI\nlanguage dispatch, glob-facade export, ast-grep rename, nix wrap,\nBATS lane, docs, FDR.\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "docs: implementation plan for dagnabit rust mode",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T00:39:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "403c1211d716cc7d2f1aa886dfacb8f21de672e3",
"body": "…p renames)\n\nApproved interactive design: rust as a language mode of the existing\ndagnabit binary behind the DependencyReader/LevelMapper/PackageMover\nseams (Approach A); cargo-metadata dep graph, Cargo.toml span-based\nrewrites, glob re-export facade crates, ast-grep-driven crate-rename\nsource rewri\n[…]\ns gated by cargo check. Flags the two-language dispatch\nas an FDR-bound limitation.\n\n:clown: Clown 0.3.10+bb6560d (https://github.com/amarbel-llc/clown/commit/bb6560dd30e00f9a8e16d720fcc60ab9f97c15c1)",
"is_bot": false,
"headline": "docs: design for dagnabit Rust support (crates, glob facades, ast-gre…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-07T00:33:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1b3a6d4dfaf34ecef72251c06550a82a67c1bfd9",
"body": null,
"is_bot": false,
"headline": "release v0.3.0",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-06T22:05:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51e69a84184ebeb6f62d1ec37bf92e898eba3448",
"body": "Replace the pre-existing identity-based HTTP error rendering — where\nBadRequestf(\"invalid x\") rendered Error() as \"errors.HTTP: 400 Bad\nRequest\" and hid the underlying message behind ShouldHideUnwrap —\nwith a semantics-based representation in which Error() returns the\nunderlying user message and the\n[…]\ns/0002-http-status-as-semantics.md for the full spec,\nincluding downstream migration notes for cutting-garden, madder,\nand moxy.\n\nCloses #107\n\n:clown: via [Clown](https://github.com/amarbel-llc/clown)",
"is_bot": false,
"headline": "feat(dewey/errors): HTTP status as semantics not identity (RFC 0002)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-06T21:53:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0f7aa448c4d2938cec4a4ecef734f1d795545bfe",
"body": "…ses #136)\n\nAll five dewey analyzers matched their suppression directive\n(//defer:err-checked, //seq:err-checked, //repool:owned,\n//repool:suppress, //actx:allow, //paramobj:allow) only when the comment\nsat on the same line as the flagged statement; a directive on the line\nimmediately above — the co\n[…]\nclaimed same-line-only (actx and paramobj\npackage docs, repool CLAUDE.md).\n\n🤡 Generated with Clown 0.3.10+e8ff9ee (https://github.com/amarbel-llc/clown/commit/e8ff9ee351c67cfdf06e9e61ebe262ec3aaa247d)",
"is_bot": false,
"headline": "fix: accept line-above suppression directives in dewey analyzers (clo…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-06T16:31:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f15a3fcf621770592c385c10ce7644b1f9bbdec1",
"body": "…s #134)\n\nAdd cmd/golangci-lint-dewey: a standalone Go module (deliberately NOT in\ngo.work) whose main blank-imports libs/dewey/gclplugin and hands off to\ngolangci-lint's public commands.Execute — the plain main that\n`golangci-lint custom` generates, minus the network-hungry clone/codegen.\nBuilt pur\n[…]\nile regen + dev-loop build\nrecipes: build-nix-gomod2nix-gcl, build-go-gcl.\n\n🤡 Generated with Clown 0.3.10+e8ff9ee (https://github.com/amarbel-llc/clown/commit/e8ff9ee351c67cfdf06e9e61ebe262ec3aaa247d)",
"is_bot": false,
"headline": "fix: ship nix-built custom golangci-lint with the dewey plugin (close…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-06T15:46:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "21d328cce0f439f2322021bcda8695f02180503c",
"body": "A tool handler had no way to push a notifications/progress message while\nit was still running, blocking activity-driven keep-alive for long tools.\nThe inbound params._meta.progressToken was dropped and the handler had no\nreference to the transport.\n\nParse _meta.progressToken on tools/call (new proto\n[…]\n did not request.\n\nVerified with -race: the mid-call progress write and the final response\nwrite are serialized by the transport mutex.\n\nCloses #131\n\n🤡 via Clown — https://github.com/amarbel-llc/clown",
"is_bot": false,
"headline": "fix: let go-mcp tool handlers emit notifications/progress mid-call",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-04T22:13:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c0ff74a9ec99c33dd6ee155fb9d45f00f007c048",
"body": "Add a go/analysis pass (libs/dewey/internal/alfa/analyzer_paramobj) that\ngroups function and method declarations by their parameter type list\n(order-sensitive, receiver ignored) and reports each cluster reaching the\n-min-group threshold as a parameter-object-struct candidate. The check is\nadvisory —\n[…]\nit as the paramobj singlechecker binary (nix: .#paramobj) and register\nit in the golangci-lint module plugin as opt-in, alongside actx.\n\nCloses #130\n\n🤡 via Clown — https://github.com/amarbel-llc/clown",
"is_bot": false,
"headline": "fix: add paramobj analyzer flagging shared parameter lists",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-04T22:13:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4258b25c8bb82dcef4745f9d12df50bcaf76c667",
"body": "…ext.Context\n\nAdd a go/analysis pass (libs/dewey/internal/alfa/analyzer_actx) that flags\nstdlib context.Context in function parameters, results, and struct fields\nand recommends dewey's errors.ActiveContext (interfaces.ActiveContext) for\nits lifecycle/error-cancellation semantics. Interop boundaries\n[…]\ntings.actx=true —\nsince enforcing ActiveContext is an ecosystem-specific opinion rather than a\ngeneral Go check like defererr/seqerror.\n\nCloses #129\n\n🤡 via Clown — https://github.com/amarbel-llc/clown",
"is_bot": false,
"headline": "fix: add actx analyzer enforcing dewey ActiveContext over stdlib cont…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-04T20:51:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1ee07fa5ad4271cb33ee1ad1944c6211ee056bcf",
"body": null,
"is_bot": false,
"headline": "release v0.2.9",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-04T18:14:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea00d462064200803f17144627cfff1ae2805624",
"body": "The upstream amarbel-llc/treelint flake was renamed to conformist and its\npackage installs a binary named `conformist`, not `treelint`. Everything in\nthis repo invoked the tool as `treelint` by name, so none of it resolved\nonce the rename landed (the `lint-dewey_pkgs_drift` and `lint-conformist`\nlan\n[…]\n references.\n\nVerified: conformist resolves on PATH; `dagnabit export --check` formats\nfacades with no drift; `conformist check` clean; BATS 1..11 all ok.\n\n:clown: https://github.com/amarbel-llc/clown",
"is_bot": false,
"headline": "refactor: migrate treelint → conformist (binary, config, input)",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-04T18:05:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ca7037773f93dd416321368cce35da4db4850c93",
"body": "Bumps igloo and the treelint input (now the renamed conformist repo),\ndropping the transitive treefmt-nix input conformist no longer pulls in.\n\n:clown: https://github.com/amarbel-llc/clown",
"is_bot": false,
"headline": "build(deps): refresh flake.lock (igloo + treelint→conformist)",
"author_name": "sfriedenberg-etsy",
"author_login": "sfriedenberg-etsy",
"committed_at": "2026-06-04T17:52:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db1b7096f7a6837c9c1075dde2516f1ffddf4099",
"body": null,
"is_bot": false,
"headline": "refresh flake.lock",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-01T11:57:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "777b30aa5a76ce00f4ff4c086a42dce21f803e61",
"body": null,
"is_bot": false,
"headline": "release v0.2.8",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-01T00:41:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8322cd9ecce8b9726aad439f231e8d18785d209",
"body": "…ormatter instead of skipping (closes #127)\n\nwriteCheckFixture skipped whenever findTreefmtConfig found an ancestor\ntreefmt/treelint config — always true when $TMPDIR sits inside a repo that\nhas one (this worktree's .tmp/ under the root treelint.toml), so the five\nCheckAll/CheckPackage drift tests n\n[…]\nests now execute regardless of $TMPDIR;\ntheir drift assertions are unchanged (both the committed and comparison\ncopies stay unformatted).\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
"is_bot": false,
"headline": "test(dagnabit): run CheckAll/CheckPackage fixtures via a no-op fake f…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-01T00:32:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "96cd0314decafb42215f80e55c3c8cf34cce22bd",
"body": "…ns (closes #125)\n\nexport --check rendered its comparison facades into the system temp dir\n(os.MkdirTemp(\"\")). FormatOutput runs the project formatter with its tree\nroot anchored at the config/module root, and a formatter invoked on a path\noutside that tree root formats nothing. When $TMPDIR sits ou\n[…]\nst that drives the\ntreefmt branch with a tree-root-aware fake formatter; it reproduces the\nphantom drift before the fix and passes after.\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
"is_bot": false,
"headline": "fix(dagnabit): render export --check copy in-tree so the formatter ru…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-06-01T00:12:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "035f9a8234a5f557032a36fe9a4eebe531d720b6",
"body": "just's {{message}} is literal text-splicing into the generated shebang\nscript, not safe quoting. A changelog subject containing backticks or\n$(...) — e.g. a commit titled `export --check` — lands inside the\ndouble-quoted `git tag -m \"...\"` string and bash evaluates it as a\ncommand substitution, corr\n[…]\n --: invalid option` errors. Pass the message as an exported\nenv var ($message) so git receives it as inert data.\n\nRefs amarbel-llc/eng#129\n\n🤡 Committed by Clown <https://github.com/amarbel-llc/clown>",
"is_bot": false,
"headline": "fix(justfile): pass tag message via $env var, not {{ }} interpolation",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T23:30:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1fa436167223c1e43ec29610c5e96ed0930c6a3b",
"body": null,
"is_bot": false,
"headline": "release v0.2.7",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T23:19:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "997c8675d0ed6daf8f2cf4b3fac1986181a99e90",
"body": null,
"is_bot": false,
"headline": "go mod tidy",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T23:15:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fa6869d8776ac39d59cc810c04ef54c8ac891e5",
"body": "Underscore the noun segment per eng-design_patterns-justfile(7) style (verb-noun\nwith underscores inside a multi-word noun, cf. list-active_sessions). Also\nde-stale the CLAUDE.md `just lint` description: lint-fmt/treefmt → lint-treelint\nafter the treefmt-nix → treelint migration.\n\nRefs amarbel-llc/treelint#1 — a future whole-tree linter kind could host the\n`dagnabit export --check` facade-drift gate this recipe runs.\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
"is_bot": false,
"headline": "refactor(justfile): rename lint-dewey-pkgs-drift → lint-dewey_pkgs_drift",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T23:08:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a701f5639a98b1f31f5c8a36a46fc558c534aa63",
"body": "…t detection\n\n`dagnabit export --check` regenerates + formats facades into a temp dir and\ncompares against the committed pkgs/, exiting nonzero (naming the out-of-sync\npackages) WITHOUT mutating the tree. Works in every export mode (--library,\nexplicit packages, directive scan). lint-dewey-pkgs-drif\n[…]\ndir.\n- Hand-written *_test.go facade tests are never flagged as stale (the exporter\n only emits main.go + build-tag files).\n\nCloses #123\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
"is_bot": false,
"headline": "feat(dagnabit): add `export --check` for side-effect-free facade drif…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T17:39:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a95ee88592e23c2363e028346e0efeb62bd10953",
"body": "…e alias\n\nnixpkgs/igloo now aliases `nixfmt-rfc-style` to `pkgs.nixfmt` and emits an\neval warning steering callers to the latter. Switch both references (the\n`treelintFmt` formatter wrapper's runtimeInputs and the default devShell)\nto `pkgs.nixfmt`; update the CLAUDE.md Code Style note.\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
"is_bot": false,
"headline": "fix(flake): use pkgs.nixfmt instead of the deprecated nixfmt-rfc-styl…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T16:57:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de8ddef655c1c610aecdfb793150755f4352d41c",
"body": "…DR housekeeping\n\n- delete lib/mkMarketplace.nix + lib.mkMarketplace; the install*/\n generate-marketplace/package-brew CLI subcommands; internal/{install,\n localplugin,mcp,marketplace,packagebrew,config,decision} + top-level purse/;\n marketplace-config.json; templates/marketplace/; .#marketplace[\n[…]\nfmt gate.\n\nFDR housekeeping: deprecate homebrew-tap FDR 0008; relocate fast-direnv FDR\n0003 to amarbel-llc/igloo.\n\nCloses #91\nCloses #110\n\nSigned-off-by: Clown 🤡 <https://github.com/amarbel-llc/clown>",
"is_bot": false,
"headline": "refactor!: remove marketplace aggregation; align justfile taxonomy; F…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T16:41:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9a8e4f2390cccd8dff7b4d2c56940b06ee357b30",
"body": "Remove the treefmt-nix input, treefmtEvalBySystem, the devshell treefmt\nwrapper, and checks.treefmt. `nix fmt` now runs a treelint wrapper (treelint\nplus the formatter binaries its ./treelint.toml drives on PATH); formatting\ndrift is gated by `just lint` (treelint check) rather than a flake check.\nD\n[…]\ntreelint; `just lint` -> treelint check).\n\nVerified: `nix fmt` -> treelint (no-op on the formatted tree); `just` green\n(validate / lint / build / test).\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
"is_bot": false,
"headline": "build: retire treefmt-nix; `nix fmt` runs treelint",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T16:06:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7f6f1b4cc66cb8b5654e9a0de8b4dc66f986bdf1",
"body": "- `just fmt` now runs treelint (repair) instead of `go fmt ./...` -- repo-wide\n formatting via treelint's chain (goimports -> gofumpt, nixfmt, shfmt) per\n ./treelint.toml.\n- `just lint` gains lint-treelint (`treelint check`): the read-only format\n drift gate (sandbox-and-diff) plus shellcheck.\n\nV\n[…]\na no-op\non the formatted tree. treefmt-nix's `nix fmt` / checks.treefmt still exist in\nthe flake (now redundant); retiring them is the follow-up commit.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
"is_bot": false,
"headline": "build: run treelint in the just CI loop (fmt + lint gate)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T14:11:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f68503ac3658222a00d656cb8e4ef12673f8016d",
"body": "Silences the BW02 warnings bats emitted after the SC2314 fix switched the\nomits-checks to `run ! grep` -- a Bats >= 1.5 feature that warns unless the\nminimum version is declared. Still 22/22.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
"is_bot": false,
"headline": "test(bats): declare bats_require_minimum_version 1.5.0 in package_brew",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T14:03:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "752deee32782608200ec1a5ee207d647b8cfe8be",
"body": "Picks up treelint's `Args: cobra.ArbitraryArgs` fix, so dagnabit's\n`treelint <output-dir>` facade-format pass works again -- it had started\nfailing with `unknown command <path>` once treelint gained the check/version\nsubcommands. `just lint` (dewey-export-library + drift check) is green again.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
"is_bot": false,
"headline": "build(deps): bump treelint to dbc3fb9 (positional-path-args fix)",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T13:55:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4a29e1cbe11b5db70143ca09ce8b9b5f3b98f43e",
"body": "- package_brew.bats: `! grep -q X \"$F\"` -> `run ! grep -q X \"$F\"` (SC2314).\n A bare `!` on a non-final line is a no-op in Bats >= 1.5; `run !` makes the\n \"pattern absent\" assertions actually enforce. Intent-preserving; verified by\n `just test-package-brew` (22/22 pass, including the converted omi\n[…]\n a false positive, since $output is set by\n run_package_bin's internal `run`.\n\n`treelint check` is now clean: zero formatter drift, zero lint findings.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
"is_bot": false,
"headline": "test(bats): fix shellcheck findings surfaced by treelint",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T13:42:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cc62ba354210a3560bc950349d4488a07e11aa4e",
"body": "Apply shfmt formatting that treefmt-nix's shfmt never actually applied -- its\noptions were lib.mkForce-overridden in treefmt.nix without -w, making the\nformatter a silent no-op. Pure whitespace normalization (e.g. `> \"$x\"` ->\n`>\"$x\"`); no test-logic changes. Produced by `treelint` (which runs shfmt -w).\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
"is_bot": false,
"headline": "format: shfmt the bats/bash test files",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T13:31:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96ed62fea024a636234d942602ee2422a2721e96",
"body": "…t.toml)\n\nAdd treelint (the treefmt successor) as a flake input and to the devshell,\nalongside nixfmt-rfc-style -- the one formatter the bare devshell lacked\n(gofumpt/goimports/shfmt/shellcheck already come from the go/shell devenvs).\nAdd treelint.toml mirroring treefmt.nix's formatter chain (goimpo\n[…]\ndditive for now: `nix fmt` (treefmt-nix) still drives formatting. Switching\nCI to treelint + resolving the shell reformat / shellcheck findings is next.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
"is_bot": false,
"headline": "build: wire treelint into purse-first (flake input, devshell, treelin…",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T13:20:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b9cd7a8c724c5d5cfe75077ab823f5e6a3658875",
"body": "exporter_treefmt.go (used by `dagnabit export` to format generated facades)\nhardcoded treefmt config names + the `treefmt` binary. Add treelint.toml /\n.treelint.toml to the config search (preferred over the treefmt variants)\nand derive the formatter binary from the matched config, preferring\n`treeli\n[…]\n green.\nPrerequisite for treelint replacing treefmt-nix in purse-first.\n\nTests: TestFindTreefmtConfig_PrefersTreelint, TestFormatOutput_InvokesTreelint.\n\n🤡 Clown (https://github.com/amarbel-llc/clown)",
"is_bot": false,
"headline": "dewey(dagnabit): recognize treelint.toml + run the treelint binary",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T13:06:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "39fbd2a9eb82147e900b199310346cc636e77c5d",
"body": "Fix broken generate-marketplace example (missing required --plugins-dir,\nwrong --output) and expand the README to a self-contained overview:\n\n- CLI command table (9 commands from cmd/purse-first/main.go)\n- Nix package output table\n- dewey analyzers + golangci-lint module plugin (gclplugin/)\n- go-mcp\n[…]\ntallMCP + manpage tree\n- repository layout, development/CI-gate, multi-artifact versioning\n\nFlag go-mcp as mid-overhaul / API in flux in two places.\n\n🤡 via Clown — https://github.com/amarbel-llc/clown",
"is_bot": false,
"headline": "docs(readme): comprehensive standalone rewrite",
"author_name": "friedenberg",
"author_login": "friedenberg",
"committed_at": "2026-05-31T11:42:42Z",
"body_truncated": true,
"is_coding_agent": false
}
],
"releases_count": 17,
"commits_last_year": 1016,
"latest_release_at": "2026-07-03T14:21:23Z",
"latest_release_tag": "v0.4.1",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 23,
"days_since_latest_release": 26,
"mean_days_between_releases": 3.7
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "code.linenisgreat.com/purse-first",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": null,
"registry_url": "https://pkg.go.dev/code.linenisgreat.com/purse-first",
"is_deprecated": false,
"latest_version": "v0.5.0",
"repository_url": null,
"versions_count": 14,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-20T15:34:30Z",
"latest_version_yanked": null,
"days_since_latest_publish": 9
}
]
},
"popularity": {
"forks": 0,
"stars": 1,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 1
},
"ai_readiness": {
"has_nix": true,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": true,
"bootstrap_files": [
"justfile",
"libs/go-mcp/justfile",
"zz-tests_bats/rfc-0001/justfile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"cmd/golangci-lint-dewey/go.mod",
"go.mod",
"libs/dewey/go.mod",
"libs/go-mcp/command/huh/go.mod",
"libs/go-mcp/go.mod"
],
"largest_source_bytes": 92665,
"source_files_sampled": 730,
"oversized_source_files": 2,
"agent_instruction_files": [
"CLAUDE.md",
"libs/dewey/CLAUDE.md",
"libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md",
"libs/dewey/internal/0/bech32/CLAUDE.md",
"libs/dewey/internal/0/box_chars/CLAUDE.md",
"libs/dewey/internal/0/equality/CLAUDE.md",
"libs/dewey/internal/0/exec/CLAUDE.md",
"libs/dewey/internal/0/flag_policy/CLAUDE.md",
"libs/dewey/internal/0/hecks/CLAUDE.md",
"libs/dewey/internal/0/http_statuses/CLAUDE.md",
"libs/dewey/internal/0/interfaces/CLAUDE.md",
"libs/dewey/internal/0/primordial/CLAUDE.md",
"libs/dewey/internal/0/reset/CLAUDE.md",
"libs/dewey/internal/0/stack_frame/CLAUDE.md",
"libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md",
"libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md",
"libs/dewey/internal/alfa/cmp/CLAUDE.md",
"libs/dewey/internal/alfa/collections_coding/CLAUDE.md",
"libs/dewey/internal/alfa/collections_map/CLAUDE.md",
"libs/dewey/internal/alfa/equals/CLAUDE.md",
"libs/dewey/internal/alfa/pool/CLAUDE.md",
"libs/dewey/internal/alfa/quiter_collection/CLAUDE.md",
"libs/dewey/internal/alfa/quiter_seq/CLAUDE.md",
"libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md",
"libs/dewey/internal/alfa/unicorn/CLAUDE.md",
"libs/dewey/internal/bravo/collections_slice/CLAUDE.md",
"libs/dewey/internal/bravo/errors/CLAUDE.md",
"libs/dewey/internal/charlie/comments/CLAUDE.md",
"libs/dewey/internal/charlie/delim_reader/CLAUDE.md",
"libs/dewey/internal/charlie/env_vars/CLAUDE.md",
"libs/dewey/internal/charlie/expansion/CLAUDE.md",
"libs/dewey/internal/charlie/flags/CLAUDE.md",
"libs/dewey/internal/charlie/lua/CLAUDE.md",
"libs/dewey/internal/charlie/ohio/CLAUDE.md",
"libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md",
"libs/dewey/internal/charlie/quiter/CLAUDE.md",
"libs/dewey/internal/charlie/quiter_set/CLAUDE.md",
"libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md",
"libs/dewey/internal/charlie/ui/CLAUDE.md",
"libs/dewey/internal/charlie/values/CLAUDE.md",
"libs/dewey/internal/delta/catgut/CLAUDE.md",
"libs/dewey/internal/delta/cli/CLAUDE.md",
"libs/dewey/internal/delta/collections/CLAUDE.md",
"libs/dewey/internal/delta/collections_ptr/CLAUDE.md",
"libs/dewey/internal/delta/collections_value/CLAUDE.md",
"libs/dewey/internal/delta/delim_io/CLAUDE.md",
"libs/dewey/internal/delta/files/CLAUDE.md",
"libs/dewey/internal/delta/format/CLAUDE.md",
"libs/dewey/internal/delta/heap/CLAUDE.md",
"libs/dewey/internal/delta/script_config/CLAUDE.md",
"libs/dewey/internal/delta/thyme/CLAUDE.md",
"libs/dewey/internal/delta/tridex/CLAUDE.md",
"libs/dewey/internal/delta/trie/CLAUDE.md",
"libs/dewey/internal/delta/xdg_defaults/CLAUDE.md",
"libs/dewey/internal/echo/age/CLAUDE.md",
"libs/dewey/internal/echo/alfred/CLAUDE.md",
"libs/dewey/internal/echo/collections_delta/CLAUDE.md",
"libs/dewey/internal/echo/command/CLAUDE.md",
"libs/dewey/internal/echo/debug/CLAUDE.md",
"libs/dewey/internal/echo/editor/CLAUDE.md",
"libs/dewey/internal/echo/ohio_files/CLAUDE.md",
"libs/dewey/internal/echo/script_value/CLAUDE.md",
"libs/dewey/internal/echo/xdg/CLAUDE.md",
"libs/dewey/internal/foxtrot/config_cli/CLAUDE.md"
],
"agent_instruction_max_bytes": 16698
},
"dependencies": {
"manifests": [
"go.mod"
],
"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": [
"go"
],
"dependencies": [
{
"name": "github.com/BurntSushi/toml",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.0"
},
{
"name": "github.com/spf13/cobra",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.2"
}
],
"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": 1,
"merged_prs": 3,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 1
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "friedenberg",
"commits": 982,
"avatar_url": "https://avatars.githubusercontent.com/u/181492?v=4"
},
{
"type": "User",
"login": "sfriedenberg-etsy",
"commits": 38,
"avatar_url": "https://avatars.githubusercontent.com/u/239646900?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
}
],
"contributors_sampled": 3,
"top_contributor_share": 0.962
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"flakehub.yml",
"release.yml"
],
"has_docs_dir": true,
"linter_configs": [
".golangci.yml"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"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": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "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": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "16 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "c1ced82d4ee85784a718a7130c7c3960e7d692b1",
"ran_at": "2026-07-29T23:12:30Z",
"aggregate_score": 3.1,
"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-29T13:46:33Z",
"oldest_open_prs": [
{
"number": 116,
"created_at": "2026-05-27T21:08:40Z",
"last_comment_at": "2026-05-27T21:12:06Z",
"last_comment_author": "friedenberg"
}
],
"last_merged_pr_at": "2026-05-31T01:32:47Z",
"ci_last_conclusion": "FAILURE",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/amarbel-llc/purse-first",
"host": "github.com",
"name": "purse-first",
"owner": "amarbel-llc"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"security": 31,
"vitality": 88,
"community": 24,
"governance": 49,
"engineering": 82
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 88,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 80,
"inputs": {
"commits_last_year": 1016,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 23
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "23/52 weeks with commits",
"points": 15.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 23
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "1016 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 1016
}
}
],
"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": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 17,
"latest_release_tag": "v0.4.1",
"releases_from_tags": false,
"days_since_latest_release": 26,
"mean_days_between_releases": 3.7
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "17 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 17
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 26 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 26
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~3.7 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 3.7
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 24,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 1,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "1 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 1
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"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": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 49,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 14,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 3,
"top_contributor_share": 0.962
},
"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 96% of commits",
"points": 0.9,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 96
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "3 contributors",
"points": 4.1,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 3
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"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": 54,
"inputs": {
"merged_prs": 3,
"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": "3/4 decided PRs merged",
"points": 28.7,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 3,
"decided": 4
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 44,
"inputs": {
"followers": 0,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "amarbel-llc",
"public_repos": 56,
"account_age_days": 169
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "0 followers of amarbel-llc",
"points": 0,
"status": "missed",
"details": [
{
"code": "owner_followers",
"params": {
"count": 0,
"login": "amarbel-llc"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "56 public repos, account ~0 yr old",
"points": 13.7,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 56
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"code.linenisgreat.com/purse-first"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 9
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 9 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 9
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "14 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 14
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 82,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"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": 80,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": ".golangci.yml",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"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": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"topics": [
"claude-code",
"golang",
"mcp",
"nix-flake",
"package-framework",
"plugin-system",
"rust"
],
"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": "7 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 7
}
}
],
"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": 31,
"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, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 31,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 15,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 3,
"scorecard_aggregate": 3.1
},
"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 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow 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 0",
"points": 0,
"status": "missed",
"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": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "16 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 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": 66,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "good",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.7,
"agent_instruction_files": [
"CLAUDE.md",
"libs/dewey/CLAUDE.md",
"libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md",
"libs/dewey/internal/0/bech32/CLAUDE.md",
"libs/dewey/internal/0/box_chars/CLAUDE.md",
"libs/dewey/internal/0/equality/CLAUDE.md",
"libs/dewey/internal/0/exec/CLAUDE.md",
"libs/dewey/internal/0/flag_policy/CLAUDE.md",
"libs/dewey/internal/0/hecks/CLAUDE.md",
"libs/dewey/internal/0/http_statuses/CLAUDE.md",
"libs/dewey/internal/0/interfaces/CLAUDE.md",
"libs/dewey/internal/0/primordial/CLAUDE.md",
"libs/dewey/internal/0/reset/CLAUDE.md",
"libs/dewey/internal/0/stack_frame/CLAUDE.md",
"libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md",
"libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md",
"libs/dewey/internal/alfa/cmp/CLAUDE.md",
"libs/dewey/internal/alfa/collections_coding/CLAUDE.md",
"libs/dewey/internal/alfa/collections_map/CLAUDE.md",
"libs/dewey/internal/alfa/equals/CLAUDE.md",
"libs/dewey/internal/alfa/pool/CLAUDE.md",
"libs/dewey/internal/alfa/quiter_collection/CLAUDE.md",
"libs/dewey/internal/alfa/quiter_seq/CLAUDE.md",
"libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md",
"libs/dewey/internal/alfa/unicorn/CLAUDE.md",
"libs/dewey/internal/bravo/collections_slice/CLAUDE.md",
"libs/dewey/internal/bravo/errors/CLAUDE.md",
"libs/dewey/internal/charlie/comments/CLAUDE.md",
"libs/dewey/internal/charlie/delim_reader/CLAUDE.md",
"libs/dewey/internal/charlie/env_vars/CLAUDE.md",
"libs/dewey/internal/charlie/expansion/CLAUDE.md",
"libs/dewey/internal/charlie/flags/CLAUDE.md",
"libs/dewey/internal/charlie/lua/CLAUDE.md",
"libs/dewey/internal/charlie/ohio/CLAUDE.md",
"libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md",
"libs/dewey/internal/charlie/quiter/CLAUDE.md",
"libs/dewey/internal/charlie/quiter_set/CLAUDE.md",
"libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md",
"libs/dewey/internal/charlie/ui/CLAUDE.md",
"libs/dewey/internal/charlie/values/CLAUDE.md",
"libs/dewey/internal/delta/catgut/CLAUDE.md",
"libs/dewey/internal/delta/cli/CLAUDE.md",
"libs/dewey/internal/delta/collections/CLAUDE.md",
"libs/dewey/internal/delta/collections_ptr/CLAUDE.md",
"libs/dewey/internal/delta/collections_value/CLAUDE.md",
"libs/dewey/internal/delta/delim_io/CLAUDE.md",
"libs/dewey/internal/delta/files/CLAUDE.md",
"libs/dewey/internal/delta/format/CLAUDE.md",
"libs/dewey/internal/delta/heap/CLAUDE.md",
"libs/dewey/internal/delta/script_config/CLAUDE.md",
"libs/dewey/internal/delta/thyme/CLAUDE.md",
"libs/dewey/internal/delta/tridex/CLAUDE.md",
"libs/dewey/internal/delta/trie/CLAUDE.md",
"libs/dewey/internal/delta/xdg_defaults/CLAUDE.md",
"libs/dewey/internal/echo/age/CLAUDE.md",
"libs/dewey/internal/echo/alfred/CLAUDE.md",
"libs/dewey/internal/echo/collections_delta/CLAUDE.md",
"libs/dewey/internal/echo/command/CLAUDE.md",
"libs/dewey/internal/echo/debug/CLAUDE.md",
"libs/dewey/internal/echo/editor/CLAUDE.md",
"libs/dewey/internal/echo/ohio_files/CLAUDE.md",
"libs/dewey/internal/echo/script_value/CLAUDE.md",
"libs/dewey/internal/echo/xdg/CLAUDE.md",
"libs/dewey/internal/foxtrot/config_cli/CLAUDE.md"
],
"agent_instruction_max_bytes": 16698
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "CLAUDE.md, libs/dewey/CLAUDE.md, libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md, libs/dewey/internal/0/bech32/CLAUDE.md, libs/dewey/internal/0/box_chars/CLAUDE.md, libs/dewey/internal/0/equality/CLAUDE.md, libs/dewey/internal/0/exec/CLAUDE.md, libs/dewey/internal/0/flag_policy/CLAUDE.md, libs/dewey/internal/0/hecks/CLAUDE.md, libs/dewey/internal/0/http_statuses/CLAUDE.md, libs/dewey/internal/0/interfaces/CLAUDE.md, libs/dewey/internal/0/primordial/CLAUDE.md, libs/dewey/internal/0/reset/CLAUDE.md, libs/dewey/internal/0/stack_frame/CLAUDE.md, libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md, libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md, libs/dewey/internal/alfa/cmp/CLAUDE.md, libs/dewey/internal/alfa/collections_coding/CLAUDE.md, libs/dewey/internal/alfa/collections_map/CLAUDE.md, libs/dewey/internal/alfa/equals/CLAUDE.md, libs/dewey/internal/alfa/pool/CLAUDE.md, libs/dewey/internal/alfa/quiter_collection/CLAUDE.md, libs/dewey/internal/alfa/quiter_seq/CLAUDE.md, libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md, libs/dewey/internal/alfa/unicorn/CLAUDE.md, libs/dewey/internal/bravo/collections_slice/CLAUDE.md, libs/dewey/internal/bravo/errors/CLAUDE.md, libs/dewey/internal/charlie/comments/CLAUDE.md, libs/dewey/internal/charlie/delim_reader/CLAUDE.md, libs/dewey/internal/charlie/env_vars/CLAUDE.md, libs/dewey/internal/charlie/expansion/CLAUDE.md, libs/dewey/internal/charlie/flags/CLAUDE.md, libs/dewey/internal/charlie/lua/CLAUDE.md, libs/dewey/internal/charlie/ohio/CLAUDE.md, libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md, libs/dewey/internal/charlie/quiter/CLAUDE.md, libs/dewey/internal/charlie/quiter_set/CLAUDE.md, libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md, libs/dewey/internal/charlie/ui/CLAUDE.md, libs/dewey/internal/charlie/values/CLAUDE.md, libs/dewey/internal/delta/catgut/CLAUDE.md, libs/dewey/internal/delta/cli/CLAUDE.md, libs/dewey/internal/delta/collections/CLAUDE.md, libs/dewey/internal/delta/collections_ptr/CLAUDE.md, libs/dewey/internal/delta/collections_value/CLAUDE.md, libs/dewey/internal/delta/delim_io/CLAUDE.md, libs/dewey/internal/delta/files/CLAUDE.md, libs/dewey/internal/delta/format/CLAUDE.md, libs/dewey/internal/delta/heap/CLAUDE.md, libs/dewey/internal/delta/script_config/CLAUDE.md, libs/dewey/internal/delta/thyme/CLAUDE.md, libs/dewey/internal/delta/tridex/CLAUDE.md, libs/dewey/internal/delta/trie/CLAUDE.md, libs/dewey/internal/delta/xdg_defaults/CLAUDE.md, libs/dewey/internal/echo/age/CLAUDE.md, libs/dewey/internal/echo/alfred/CLAUDE.md, libs/dewey/internal/echo/collections_delta/CLAUDE.md, libs/dewey/internal/echo/command/CLAUDE.md, libs/dewey/internal/echo/debug/CLAUDE.md, libs/dewey/internal/echo/editor/CLAUDE.md, libs/dewey/internal/echo/ohio_files/CLAUDE.md, libs/dewey/internal/echo/script_value/CLAUDE.md, libs/dewey/internal/echo/xdg/CLAUDE.md, libs/dewey/internal/foxtrot/config_cli/CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "CLAUDE.md, libs/dewey/CLAUDE.md, libs/dewey/cmd/reflexive-interface-generator/CLAUDE.md, libs/dewey/internal/0/bech32/CLAUDE.md, libs/dewey/internal/0/box_chars/CLAUDE.md, libs/dewey/internal/0/equality/CLAUDE.md, libs/dewey/internal/0/exec/CLAUDE.md, libs/dewey/internal/0/flag_policy/CLAUDE.md, libs/dewey/internal/0/hecks/CLAUDE.md, libs/dewey/internal/0/http_statuses/CLAUDE.md, libs/dewey/internal/0/interfaces/CLAUDE.md, libs/dewey/internal/0/primordial/CLAUDE.md, libs/dewey/internal/0/reset/CLAUDE.md, libs/dewey/internal/0/stack_frame/CLAUDE.md, libs/dewey/internal/0/vim_cli_options_builder/CLAUDE.md, libs/dewey/internal/alfa/analyzer_repool/CLAUDE.md, libs/dewey/internal/alfa/cmp/CLAUDE.md, libs/dewey/internal/alfa/collections_coding/CLAUDE.md, libs/dewey/internal/alfa/collections_map/CLAUDE.md, libs/dewey/internal/alfa/equals/CLAUDE.md, libs/dewey/internal/alfa/pool/CLAUDE.md, libs/dewey/internal/alfa/quiter_collection/CLAUDE.md, libs/dewey/internal/alfa/quiter_seq/CLAUDE.md, libs/dewey/internal/alfa/reflexive_interface_generator/CLAUDE.md, libs/dewey/internal/alfa/unicorn/CLAUDE.md, libs/dewey/internal/bravo/collections_slice/CLAUDE.md, libs/dewey/internal/bravo/errors/CLAUDE.md, libs/dewey/internal/charlie/comments/CLAUDE.md, libs/dewey/internal/charlie/delim_reader/CLAUDE.md, libs/dewey/internal/charlie/env_vars/CLAUDE.md, libs/dewey/internal/charlie/expansion/CLAUDE.md, libs/dewey/internal/charlie/flags/CLAUDE.md, libs/dewey/internal/charlie/lua/CLAUDE.md, libs/dewey/internal/charlie/ohio/CLAUDE.md, libs/dewey/internal/charlie/ohio_buffer/CLAUDE.md, libs/dewey/internal/charlie/quiter/CLAUDE.md, libs/dewey/internal/charlie/quiter_set/CLAUDE.md, libs/dewey/internal/charlie/string_builder_joined/CLAUDE.md, libs/dewey/internal/charlie/ui/CLAUDE.md, libs/dewey/internal/charlie/values/CLAUDE.md, libs/dewey/internal/delta/catgut/CLAUDE.md, libs/dewey/internal/delta/cli/CLAUDE.md, libs/dewey/internal/delta/collections/CLAUDE.md, libs/dewey/internal/delta/collections_ptr/CLAUDE.md, libs/dewey/internal/delta/collections_value/CLAUDE.md, libs/dewey/internal/delta/delim_io/CLAUDE.md, libs/dewey/internal/delta/files/CLAUDE.md, libs/dewey/internal/delta/format/CLAUDE.md, libs/dewey/internal/delta/heap/CLAUDE.md, libs/dewey/internal/delta/script_config/CLAUDE.md, libs/dewey/internal/delta/thyme/CLAUDE.md, libs/dewey/internal/delta/tridex/CLAUDE.md, libs/dewey/internal/delta/trie/CLAUDE.md, libs/dewey/internal/delta/xdg_defaults/CLAUDE.md, libs/dewey/internal/echo/age/CLAUDE.md, libs/dewey/internal/echo/alfred/CLAUDE.md, libs/dewey/internal/echo/collections_delta/CLAUDE.md, libs/dewey/internal/echo/command/CLAUDE.md, libs/dewey/internal/echo/debug/CLAUDE.md, libs/dewey/internal/echo/editor/CLAUDE.md, libs/dewey/internal/echo/ohio_files/CLAUDE.md, libs/dewey/internal/echo/script_value/CLAUDE.md, libs/dewey/internal/echo/xdg/CLAUDE.md, libs/dewey/internal/foxtrot/config_cli/CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "70 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 37.3,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 70,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 61,
"inputs": {
"has_nix": true,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [
"justfile",
"libs/go-mcp/justfile",
"zz-tests_bats/rfc-0001/justfile"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [
"cmd/golangci-lint-dewey/go.mod",
"go.mod",
"libs/dewey/go.mod",
"libs/go-mcp/command/huh/go.mod",
"libs/go-mcp/go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "justfile, libs/go-mcp/justfile, zz-tests_bats/rfc-0001/justfile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "justfile, libs/go-mcp/justfile, zz-tests_bats/rfc-0001/justfile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": ".golangci.yml",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Nix, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Nix, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "MDX",
"largest_source_bytes": 92665,
"source_files_sampled": 730,
"oversized_source_files": 2
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "MDX without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "MDX"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "2/730 source files over 60KB",
"points": 54.8,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 730,
"oversized": 2
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "moderate",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-29T23:12:36.156345Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/amarbel-llc/purse-first.svg",
"full_name": "amarbel-llc/purse-first",
"license_state": "standard",
"license_spdx": "MIT"
}