Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-29 23:12 UTC

amarbel-llc / purse-first

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

MDX · GoMIT★ 1 star⑂ 0 forkssince Feb 2026View on GitHub ↗

amarbel-llc/purse-first holds a health index of 57 out of 100, placing it in the Moderate band. It scores highest on Vitality (88/100) and lowest on Community & Adoption (24/100). It was last updated today. A single contributor accounts for most of its recent work.

57
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

57
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

amarbel llcOrganization
0 followers56 public repossince Feb 2026

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Gocode.linenisgreat.com/purse-firstv0.5.0-149 days ago

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

88Excellent · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
15.9/36Commit cadence — 23/52 weeks with commits
18/18Commit volume — 1,016 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year1,016
human_commit_share1
days_since_last_push0
active_weeks_last_year23

Release discipline

100Excellent
How it's scored
27/27Ships releases — 17 releases published
36/36Release recency — latest release 26 days ago
27/27Release cadence — a release every ~3.7 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count17
latest_release_tagv0.4.1
releases_from_tagsno
days_since_latest_release26
mean_days_between_releases3.7
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

24Critical · 18% of overall
How it's scored
0/60Stars — 1 stars
0/25Forks — 0 forks
0/15Watchers — 0 watchers
Inputs used
forks0
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

49At risk · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.9/22.5Commit distribution — top contributor authored 96% of commits
4.1/13.5Contributor breadth — 3 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled3
top_contributor_share0.962
How it's scored
0/46.8Issue resolution — no issues or no data
28.7/38.3PR acceptance — 3/4 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs3
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs1
Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
0/25Owner reach — 0 followers of amarbel-llc
13.7/25Track record — 56 public repos, account ~0 yr old
Inputs used
followers0
owner_typeOrganization
is_verified
owner_loginamarbel-llc
public_repos56
account_age_days169
How it's scored
25/25Published & resolvable — 1 package(s) on go
35/35Publish recency — latest publish 9 days ago
20/20Version history — 14 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagescode.linenisgreat.com/purse-first
ecosystemsgo
any_deprecatedno
min_days_since_publish9

Engineering Quality

Are baseline engineering and documentation practices in place?

82Good · 20% of overall
How it's scored
24/24CI workflows — 2 workflow(s)
24/24Tests present
16/16Linter config — .golangci.yml
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.

Documentation

85Excellent
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
10/10Topics — 7 topics
10/10Wiki
Inputs used
topicsclaude-code, golang, mcp, nix-flake, package-framework, plugin-system, rust
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

31At risk · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — no data
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 16 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3.1
Excluded from scoring (no data or not applicable): ci_tests, packaging, signed_releases. Remaining weights renormalized.

AI Readiness

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.

66Moderate · 0% of overall
How it's scored
45/45Agent instructions — 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
0/15Machine-readable docs (llms.txt)
37.3/40Legible commit history — 70 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.7
agent_instruction_filesCLAUDE.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_bytes16,698
How it's scored
18/18One-command bootstrap — justfile, libs/go-mcp/justfile, zz-tests_bats/rfc-0001/justfile
22/22Automated tests
11/11Lint / format config — .golangci.yml
0/11Static type checking
10/10Reproducible environment — Nix, lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 100
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixyes
has_testsyes
lockfilesgo.sum
has_dockerfileno
typed_languageno
bootstrap_filesjustfile, libs/go-mcp/justfile, zz-tests_bats/rfc-0001/justfile
has_devcontainerno
has_linter_configyes
typecheck_configs
agent_commit_share0
toolchain_manifestscmd/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_share0
How it's scored
0/45Type-checkable code — MDX without a type-check config
54.8/55Manageable file sizes — 2/730 source files over 60KB
Inputs used
primary_languageMDX
largest_source_bytes92,665
source_files_sampled730
oversized_source_files2
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
20/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalyes
api_schema_files

Key facts

1GitHub stars
3contributors
1,016commits, last 12 months
0days since last push
17releases
1bus factor
0open issues
Gopackage ecosystems

Data collection 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

More detail

OpenSSF Scorecard 3.1 / 10
3.1aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-29 23:12 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities16 existing vulnerabilities detected
Direct dependencies 2
RegistryPackageVersion constraintManifest
Gogithub.com/BurntSushi/tomlv1.6.0go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsGo.