Public record
Software health reportschema 0.27.0 · metrics 1.13.0 · 2026-07-26 05:19 UTC

MoonCaves / rawclaw

Fast keyword search over your Claude Code sessions — single static Go binary, SQLite FTS5, no LLM, no API key.

GoMIT★ 0 stars⑂ 0 forkssince Jun 2026View on GitHub ↗

MoonCaves/rawclaw holds a health index of 54 out of 100, placing it in the Moderate band. It scores highest on AI Readiness (84/100) and lowest on Security (33/100). It was last updated 3 days ago. A single contributor accounts for most of its recent work.

54
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.

54
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

Remotely HumanPersonal account
1 follower16 public repossince Sep 2023

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Gogithub.com/MoonCaves/rawclawv0.7.1-85 days ago

Metrics by category

Vitality

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

71Good · 22% of overall
How it's scored
36/36Push recency — last push 3 days ago
3.5/36Commit cadence — 5/52 weeks with commits
18/18Commit volume — 167 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year167
human_commit_share1
days_since_last_push3
active_weeks_last_year5
How it's scored
27/27Ships releases — 8 releases published
36/36Release recency — latest release 5 days ago
27/27Release cadence — a release every ~0.4 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count8
latest_release_tagv0.7.1
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases0.4

Community & Adoption

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

33At risk · 18% of overall
How it's scored
0/60Stars — 0 stars
0/25Forks — 0 forks
0/15Watchers — 0 watchers
Inputs used
forks0
stars0
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)
18/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
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?

50Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0/22.5Commit distribution — top contributor authored 100% of commits
1.4/13.5Contributor breadth — 1 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled1
top_contributor_share1
How it's scored
0/46.8Issue resolution — no issues or no data
38.2/38.3PR acceptance — 1/1 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/28 approved changesets -- score normalized to 0
Inputs used
merged_prs1
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
2.2/25Owner reach — 1 followers of MoonCaves
14.7/25Track record — 16 public repos, account ~2 yr old
Inputs used
followers1
owner_typeUser
is_verified
owner_loginMoonCaves
public_repos16
account_age_days1,054
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on go
35/35Publish recency — latest publish 5 days ago
20/20Version history — 8 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesgithub.com/MoonCaves/rawclaw
ecosystemsgo
any_deprecatedno
min_days_since_publish5

Engineering Quality

Are baseline engineering and documentation practices in place?

76Good · 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
20/20OpenSSF Scorecard: CI-Tests — 1 out of 1 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno

Documentation

65Moderate
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
0/10Wiki
Inputs used
topics
has_wikino
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

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

33At 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
2.5/2.5CI-Tests — 1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/28 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
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3.3

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.

84Good · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 87 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.87
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes4,790
How it's scored
12.6/18One-command bootstrap — go.mod (toolchain convention, no task runner)
22/22Automated tests
11/11Lint / format config — .golangci.yml
11/11Static type checking — Go (statically typed)
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 36 of the last 100 commits agent-authored or agent-credited
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_nixno
has_testsyes
lockfilesgo.sum
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configyes
typecheck_configs
agent_commit_share0.36
toolchain_manifestsgo.mod
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — Go (statically typed)
55/55Manageable file sizes — 0/177 source files over 60KB
Inputs used
primary_languageGo
largest_source_bytes50,003
source_files_sampled177
oversized_source_files0

Key facts

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

Data collection warnings

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

More detail

OpenSSF Scorecard 3.3 / 10
3.3aggregate

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-26 05:19 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests1 out of 1 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/28 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
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Direct dependencies 6
RegistryPackageVersion constraintManifest
Gogithub.com/gofrs/flockv0.13.0go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogithub.com/spf13/pflagv1.0.9go.mod
Gogo.uber.org/goleakv1.3.0go.mod
Gogolang.org/x/sysv0.41.0go.mod
Gomodernc.org/sqlitev1.45.0go.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": [],
      "is_fork": false,
      "size_kb": 1773,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 1363731,
        "Shell": 5133
      },
      "pushed_at": "2026-07-23T04:08:27Z",
      "created_at": "2026-06-20T15:24:05Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T04:03:45Z",
      "description": "Fast keyword search over your Claude Code sessions — single static Go binary, SQLite FTS5, no LLM, no API key.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Remotely Human",
      "type": "User",
      "login": "MoonCaves",
      "company": null,
      "location": "Austin, TX",
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/144150401?v=4",
      "created_at": "2023-09-05T15:38:25Z",
      "is_verified": null,
      "public_repos": 16,
      "account_age_days": 1054
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-07-20T17:27:23Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-07-20T12:34:14Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-07-20T11:59:17Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-07-20T09:45:25Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-07-19T11:28:26Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-07-18T09:04:43Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-07-18T06:56:22Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-07-17T15:11:11Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "bb4d23497e5595d174969d1bc1be33e67d7db1bd",
          "body": "setup: keep session tagging on the current closeout",
          "is_bot": false,
          "headline": "Merge pull request #1 from MoonCaves/codex/rawclaw-closeout-hook-copy",
          "author_name": "Remotely Human",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-23T04:03:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03451f3a38f40c38bfed4fcf12c92f29ecd54071",
          "body": null,
          "is_bot": false,
          "headline": "setup: teach background self-tagging at closeout",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-23T04:01:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74f4d48fd41e2ed9c78c1cdbf3b46aafb5e539a6",
          "body": null,
          "is_bot": false,
          "headline": "setup: stop assigning old-session tags at startup",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-23T04:01:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90dbbc9287fa92160c84664f6fface92df27375b",
          "body": "…0.7.1)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add the 'Choosing a remote' guidance to the README too (rides v…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T17:57:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "817ae66d030ed483eb69900116cc36fab3b6e77a",
          "body": "…ud; second-machine + --name)\n\nHelp text only, no behavior change. README left lean (a blind Haiku test showed the\nexisting README already gets an agent to a working bare-SSH archive).",
          "is_bot": false,
          "headline": "docs: archive init --help steers you to a remote (private/mesh vs clo…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T17:24:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3926fe1c0831ffcc913e98997d7971df14d8f4d8",
          "body": "… seam (privacy via private remote; any at-rest crypto stays optional + self-contained)",
          "is_bot": false,
          "headline": "docs: fix AGENTS.md design-link path + sharpen the at-rest-encryption…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T13:42:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "036e31b6269b6d47561b15911782309aa9ee5616",
          "body": "…iants)",
          "is_bot": false,
          "headline": "docs: add AGENTS.md — agent handbook (north star, core-vs-seam, invar…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T13:40:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdab2a5a4f56aa38e3b95c65f23d90d8088db3ee",
          "body": "…d on init\n\nsetup prints one non-blocking line pointing at 'rawclaw archive init\n<your-private-repo>' after wiring hooks — discoverable without provisioning\n(wiring vs provisioning: setup points, archive init performs). init expands a\nshorthand to a full SSH remote (user/repo, bare user -> rawclaw-t\n[…]\nssRepoURL (MIT), SSH-default. Tests cover ordering, full-URL\npassthrough (zero behavior change), and degenerate-input fallthrough.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "setup+archive: surface the archive on setup; accept a remote shorthan…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T12:31:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fd52fe567e72dca606a87b8cd3835f0df2a3994b",
          "body": "Pre-existing baseline findings that failed CI on every push: errcheck on a\ndeferred os.Remove in archive/config.go (wrap in a closure that discards the\nreturn), and staticcheck QF1003 on an if/else-if over the same byte in setup.go\nstripJSON5 (convert to a tagged switch). Behavior unchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "lint: clear the two standing golangci-lint findings (green CI)",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T12:09:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ff9fe89022ac5d4b560ff7a7fbae4ad6ea8df3c7",
          "body": "…h + command -v fallback)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "changelog: 0.6.1 — setup hooks fire regardless of PATH (baked abs pat…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T11:57:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "370df5b5f75f06e26d22969fd931adac6179c0e0",
          "body": "The three generated hook scripts gated on a bare `command -v rawclaw`, which\nsilently no-ops on any machine whose SessionStart/SessionEnd hook PATH lacks the\nbinary's dir (e.g. ~/.local/bin off a non-login PATH): setup reports success,\nthe hook never fires, the agent never learns rawclaw exists. Res\n[…]\npgraded), and silent-no-op\nonly when neither resolves. Body calls use $RAWCLAW; user-facing help text keeps\nthe bare command name.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "setup: bake absolute rawclaw path into hooks with command -v fallback",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T11:32:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5c20c8382242b274d9510f45cf38708605370c96",
          "body": "…nvelope",
          "is_bot": false,
          "headline": "changelog: 0.6.0 — cross-machine tag/verdict sync + Codex hook JSON e…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T09:43:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6def5331f6ce69f23308a0de99bf8d87ebea296",
          "body": "The regression asserted only the first banner line was present in\nadditionalContext; a truncated envelope past line 1 would slip past. Check\nseveral distinctive lines spanning the banner (mirrors the Claude banner test).\nNot byte-equality — the repo's convention rejects duplicating the banner const.",
          "is_bot": false,
          "headline": "test: strengthen Codex prime hook-JSON check to multi-line banner",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T09:27:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b76b805eab00b87484562359e767dcba2fc65910",
          "body": "Codex's hook-output parser rejects hook stdout starting with '[' or '{' unless it\nis valid hook-JSON, so the plain '[rawclaw]...' banner was silently dropped on\nCodex SessionStart. The Codex setup target now installs a variant prime script\nthat wraps the same banner as a SessionStart hook-JSON object\n(hookSpecificOutput/additionalContext) via python3, gated on python3 so its\nabsence degrades to a silent no-op. Claude Code keeps the plain-text banner.",
          "is_bot": false,
          "headline": "setup: deliver the Codex SessionStart discovery banner as hook-JSON",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T09:14:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db800e16878fdcfc5f0b4fc0a8e01cf2f00045db",
          "body": "Topic tags and routine verdicts are non-derivable agent labor, so they ride the\ntranscript archive rather than staying local-only. Each machine exports its tags\nto per-machine files beside its transcripts; push/pull syncs them; ingest\nresolves the cross-machine union — the unique real segment set wi\n[…]\ng beats a routine verdict at read time. Schema v2 adds origin_machine and a\nsession_verdict sidecar via a kill-safe in-place migration. Cross-machine tag\nconflicts surface in `rawclaw archive status`.",
          "is_bot": false,
          "headline": "archive: sync per-machine tag & verdict layer across machines",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T08:57:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9930369ab7e569d44b45aae36fd7f90d2d401522",
          "body": "SessionEnd fires for ephemeral sessions too (no message ever landed, no\ntranscript written) — ~28/hour of unresolvable ids flooded the queue on a\nbusy machine. The hook now queues only when the transcript_path Claude Code\npasses exists on disk. Live-measured: 455 queue entries in 16h, none of the\nsampled no-file ids resolvable anywhere in the projects tree.",
          "is_bot": false,
          "headline": "setup: gate the tagging queue on transcript existence",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-20T03:39:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c62f0a90e5cf7fb0d4c4cce75a8fdc286571b4ab",
          "body": null,
          "is_bot": false,
          "headline": "changelog: stamp 0.5.0 — 2026-07-19",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T11:26:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df40d37b00d54d3234ec9b57c0b674e2f9345260",
          "body": "…pics section + SessionEnd queue wired by setup, drained by the SessionStart banner",
          "is_bot": false,
          "headline": "Merge branch 'tag/autotag-queue': automatic topic tagging — README to…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T11:25:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea84e69dcf88fe8ec3a1ac43e69dd5ad229ee3bb",
          "body": "A second Claude Code hook (tagqueue.sh, SessionEnd) queues each finished\nsession for topic tagging via the new tag-queue verb; the SessionStart\nbanner lists the queue so the next session's agent tags what's pending\n(tag-prep -> tag-write; tag-write dequeues). rawclaw still calls no model.\nCodex keeps SessionStart only (its SessionEnd surface is unverified).\nEject removes both scripts and both entries.",
          "is_bot": false,
          "headline": "setup: automatic topic tagging — SessionEnd queue + SessionStart drain",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T11:25:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c7fa187e4dea6f850c705e8ecc515db7b92b150",
          "body": null,
          "is_bot": false,
          "headline": "README: topic tags section — where the conversation pivoted",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T11:17:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bee954d87bbcded2b7e9430aded947c0e56ac2c0",
          "body": "…ry commit-creating git child (rebase paths now sync on identity-less machines), transfer-op classification preserved under -c pinning, and read/outline/tag accept the ref= token exactly as search prints it",
          "is_bot": false,
          "headline": "Merge branch 'archive/verify-fixes': pinned committer identity on eve…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T09:45:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9814a47bceca1ff0b7ed85729cef8add4c7b669d",
          "body": "Review nit: the helper shapes argv for call sites in push.go and pull.go and\nis what transferOp's -c handling exists for — gitrun.go is its natural home.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive: house withCommitIdentity in gitrun.go, the git-seam file",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T09:39:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9eba140a1fd0c77a8c2f063fb37ce68797bd4312",
          "body": "transferOp returned at the first non-dash arg, so the \"-c user.name=...\"\npairs withCommitIdentity now prepends made it misread the -c VALUE as the\nverb — demoting pull --rebase to a wall-clock-capped local op, which would\nkill a legitimately slow large transfer at the 10-minute cap. Skip -c and its\nvalue when locating the verb.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive: keep identity-pinned pull classified as a transfer op",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T09:35:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "32b088e8bc79a10e8a0040c893cf21e5bf3b33f4",
          "body": "Search/topics output prints every hit as `read ref=<session8>:<uuid8>`, but\n`rawclaw read ref=...` failed (\"session \\\"ref=...\\\" not found\") — the parser\nsplit the pasted token verbatim. resolveRef now drops a leading ref=, and the\nsession-taking verbs (outline, tag via LocateSession) normalize a pasted\nread-ref to its session half. Round-trip test locks the exact printed form.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "agentproto: accept the ref= token exactly as search prints it",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T09:33:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "25ae949614f6895e83ae1416c8ea6c09dbdd2545",
          "body": "commit() already pins user.name/user.email so sync works on machines with no\ngit identity configured — but both pull --rebase invocations (the concurrent-\npush retry in pushWithRetry, and Pull's own refresh) re-create replayed local\ncommits, and unpinned they die exit-128 \"Committer identity unknown\n[…]\nests run real git under an identity-less env (useConfigOnly global,\nsystem config silenced, ident env vars cleared) and drive both rebase paths.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive: pin synthetic committer identity on pull --rebase",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T09:33:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b9f0e59fb3743c283b62f470ca1397c9d16e7ec1",
          "body": "…lds (stranded-work guard, legacy adoption with checkout proof), fresh-ctx recovery aborts, replica delete propagation, honest archive-status wording",
          "is_bot": false,
          "headline": "Merge branch 'archive/recovery-hardening': evidence-gated clone rebui…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T08:45:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52e882aa4eff4d0aa18fbca2c363eaa1d4ed16d3",
          "body": "…ca ingest, init stranded guard, comment truth\n\n- CRITICAL from bug-hunt (repro'd): a clone killed mid-checkout has a\n  resolvable HEAD but no index; adoption would let the next push's add -A\n  commit a tree dropping every other machine's dir from the archive tip —\n  and replica reconciliation would\n[…]\n everywhere it participates, container CONTRACT reflects\n  retain-vs-prune, status/pull help wording matches the rendered output,\n  staleAt lives with its only consumer, deterministic stamp assertion.",
          "is_bot": false,
          "headline": "review fixes: checkout-completion proof for adoption, quiescent repli…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T08:43:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf3ccb1513d2a1e513aeda9bd48fb59a511336b9",
          "body": "… on sync",
          "is_bot": false,
          "headline": "status: comment — sentinel absence means unverified, adoption happens…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T08:43:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e4d0aa66794660ea70e35d8c607be0edb52af31",
          "body": "…delete propagation",
          "is_bot": false,
          "headline": "docs: honest archive-status wording, evidence-gated rebuild, replica …",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T08:43:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e938277f2348bd396b255821eed7b20bd695ac23",
          "body": "…ard, fresh-ctx recovery, replica delete propagation, honest status wording\n\n- ensureClone never wipes on sentinel absence alone: a structurally complete\n  pre-sentinel clone is adopted (sentinel stamped); any rebuild first proves\n  the clone holds no commits the remote lacks (rev-list guard), and a\n[…]\nst \"last new content\"; the overdue warning is reserved for this\n  machine's own sync stamps, and a verified-up-to-date push now advances the\n  stamp so an idle-but-healthy machine never reads as dead.",
          "is_bot": false,
          "headline": "archive: recovery hardening — legacy-clone adoption, stranded-work gu…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T08:43:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a3814a1470b9a1b646b3ab2ec508e57454441ec4",
          "body": "…ce-aware delete confirm + --yes --files gate, loose-jsonl folder guard, stall-bounded archive transfers, timer install/eject hardening\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge branch 'archive/confirm-gate': ratified safety fixes — provenan…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T08:04:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "76f3f330cc063d4653b123e2b2e02bda4a2199f9",
          "body": "- GIT_SSH_COMMAND is only set when it wouldn't silently outrank a transport\n  the user configured elsewhere: an env GIT_SSH_COMMAND gets the keepalives\n  appended (user options stay authoritative), but legacy GIT_SSH or\n  core.sshCommand users keep their transport untouched.\n- non-transfer git child\n[…]\nlags\n  and stop at '--' (cobra never dispatches a subcommand there), so a search\n  like '--dir archive pull' can no longer disable its watchdog.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "bug-hunt fixes: transport respect, local-op bound, stricter verb scan",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T08:04:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba0935c7b2894784b6ea67c6c766b9e4a1dc2d58",
          "body": "…r, stall-comment notes\n\n- launchd reinstall: a failed bootstrap restores (and best-effort re-registers)\n  the prior plist instead of deleting it — a reinstall can't leave no timer.\n- eject ownership: the plist/units must carry rawclaw's own content marker\n  before eject disables or deletes a same-n\n[…]\n install and eject can't strand the units.\n- delete --yes one-line help now points at --files; gitrun comment notes the\n  OpenSSH -o assumption.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "review follow-ups: timer install/eject hardening, --yes help qualifie…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T07:53:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4d2446449fccbe6d60b35fe476c500b7ccbc752a",
          "body": "- delete: the confirmation names what dies — a delete reaching live sessions\n  (original transcript files still on disk) prompts and receipts with the\n  removes-the-originals wording; retained-only keeps the rawclaw's-copy shape.\n  Non-interactive: --yes alone covers retained-only deletes; removing \n[…]\nted)\n  for SSH. Explicit --timeout / RAWCLAW_TIMEOUT still cap hard.\n- scopes.All: marked as THE runtime-discovery site for future source tools.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "delete confirm gate, folder guard, stall-bounded archive transfers",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T07:40:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "55dddef6a524e1ea5f9182808e63277f574ad219",
          "body": "… delete, --all in folder shapes, empty-query coaching, abort exit code, one time seam, delete provenance",
          "is_bot": false,
          "headline": "Merge branch 'archive/ux-conformance': ratified UX fixes — positional…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T06:45:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db568f5258804aeae7d037116d9adb79338ed3fd",
          "body": "…usals\n\n- rawclaw --json \"\" emits a JSON envelope (error + hint) like every\n  sibling shape instead of a bare text line.\n- Retained matches dedupe by session id across index dbs: an id retained\n  in two dbs (renamed project dir, both purged) is one session — its own\n  full id no longer trips the amb\n[…]\nlists the full colliding ids (plan rows truncate\n  to 8 chars, identical under a prefix collision); a positional id\n  excluded by filter flags says so instead of claiming the session does\n  not exist.",
          "is_bot": false,
          "headline": "bug-hunt fixes: --json empty query, retained dedupe by id, richer ref…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T06:43:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0ff4a737e9c315fdef2eef8e1b72f40da3200683",
          "body": "…sts and help wording\n\n- TestPrintResults and TestPrintDebugSearch gain parseable-ISO fixtures\n  so the timefmt-seam calls at those two sites are test-guarded.\n- delete --help: 'the index row via tombstone' (the row prunes on the\n  next index pass, not at delete time).\n- mergeNames iterates without a throwaway slice; two tests assert their\n  captured output instead of blank-discarding it.",
          "is_bot": false,
          "headline": "review follow-ups: pin seam at PrintResults/PrintDebugSearch, tidy te…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T06:37:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a5f7ad85ca028abcb5a19df3e4c08a92bd2993b",
          "body": null,
          "is_bot": false,
          "headline": "changelog: unreleased entries for the UX conformance pass",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T06:32:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f51bbea7bbc7f49693e204828dab7cf4e902075b",
          "body": null,
          "is_bot": false,
          "headline": "gofmt: sort timefmt import, drop stray blank line",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T06:31:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc0ac19a9f3302b0b1d60a05d0c0c09d4c210cdf",
          "body": "… non-null JSON\n\n- Bare browse: --this-project wins over --all (the precedence --stats\n  already applies) — pinned by test.\n- Delete: a session matching both the live walk and a stale retained row\n  (file purged then restored, not yet reconciled) counts once — the\n  positional ambiguity guard no longer makes it undeletable, and the id\n  tombstones exactly once.\n- browse --all --json emits sessions: [] rather than null when empty.",
          "is_bot": false,
          "headline": "browse/delete refinements: --this-project precedence, same-id dedupe,…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T06:31:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9547ee8041b83c3522a94e3b2fd846f89d3e4d03",
          "body": "- rawclaw delete <session8|full-id> deletes that one session: same\n  dry-run-first plan, same y/N prompt (--yes works), same tombstone and\n  receipts. Sub-8-char prefixes must match exactly; an ambiguous prefix\n  refuses (nothing deleted, exit 1); an unknown id is a clear error,\n  exit 1; a foreign \n[…]\n rawclaw's copy for live sessions; for\n  retained-only deletes, rawclaw's copy alone with source-tool files\n  explicitly untouched. Matching sentences in delete --help and the\n  README delete section.",
          "is_bot": false,
          "headline": "delete: positional session form, abort exit 1, provenance note",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T06:24:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5236d0355a19d3e3abc352aebc4c789e850973ad",
          "body": "- Bare browse under --all merges recent sessions across every project\n  (same scope enumeration search uses), newest-first, capped at --limit;\n  --json emits a scope-tagged shape with per-row project. view.Browse\n  splits into BrowseDB so pre-resolved (Codex/retained) scopes browse too.\n- --stats --\n[…]\n history of its own).\n- The no-history hint now names both escapes: --list and --all.\n- rawclaw \"\" (or all-whitespace) prints a distinct empty-query coaching\n  line instead of the no-matches coaching.",
          "is_bot": false,
          "headline": "browse/stats honor --all; empty query gets its own coaching line",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T06:16:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a21daa042da8400de6b386d995c838864a88215a",
          "body": "Policy in one package: agent-parsed surfaces (search results, outline\nheader, live list + stream, --json) render marked UTC (RFC3339 Z /\nHH:MM:SSZ); human surfaces (archive status) render local time with the\nzone abbreviation. Migrated sites: live session clock + activity stamps,\nlive serve list, archive status stamps, autosync log lines, outline\nheader (was unmarked local), search-result timestamps (normalized from\nstored ISO). Behavior tests pin the policy per surface.",
          "is_bot": false,
          "headline": "timefmt: single seam for user-facing time rendering",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T06:13:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1de67983579f23543b34b624f3bbef24792a90a4",
          "body": "…ionale inline",
          "is_bot": false,
          "headline": "Merge branch 'archive/fingerprint-sweep': comments and docs state rat…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T05:39:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f16d2d545c7d7aaf50e79a4c22fd00d20384c687",
          "body": "… notes\n\nComments and design docs carried shorthand references to internal\nplanning notes (issue numbers, spec-section letters, sibling-tool\nnames) that mean nothing to a reader of this repo. Reword each site\nto say the actual rationale in place; test fixtures that only needed\n\"some other tool's hook\" now use a neutral placeholder name. Also\nrefresh the setup target comments that still described the Codex\ntarget as unimplemented. No behavior change.",
          "is_bot": false,
          "headline": "docs/comments: state rationale inline instead of referencing internal…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T05:38:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d845150e9769ac1ca20c530e7124106ab2724f3",
          "body": "…— watchdog-bound scope probes, lightweight foreign resume lookup, Windows-hermetic tests",
          "is_bot": false,
          "headline": "Merge branch 'archive/ship-review-fixes': whole-feature review fixes …",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T05:02:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fa154ba247c63ff9c10a76f9f3b38ba7472e4ae",
          "body": "…nly resume lookup, portable tests\n\n- archive scope enumeration takes the caller's context, so the per-machine\n  staleness git probes die with the CLI watchdog like every other git child;\n  the cli builds all-projects scopes under the run context (agentproto's\n  nil-scope fallback documents its deli\n[…]\nental and\n  returns loudly instead of routing into the rebuild path\n- README: GitHub's 100 MB per-file limit near the private-repo warning;\n  RAWCLAW_ARCHIVE=off kill switch beside the autosync switch",
          "is_bot": false,
          "headline": "archive/cli: ship-review hardening — ctx-bounded scope probes, read-o…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T05:02:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8c405c1e5c86e60507b74f65797060c77f8508c8",
          "body": "…ion, archive status, kill-safe push recovery",
          "is_bot": false,
          "headline": "Merge branch 'archive/05-delete-status-killsafe': own-delete propagat…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:27:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa6500878dc0fe7746ef616d1499e8b8947af3aa",
          "body": "…de tombstones, orphan interleave\n\nFindings from the pre-merge review passes, applied:\n\n- ensureClone rebuilds only on POSITIVE torn/wedged evidence (sentinel-less\n  .git, or a detached/unreadable HEAD file after recovery). A transient\n  remote-probe or HEAD-probe failure (unreadable config, exec er\n[…]\nn excludes already-tombstoned ids (no re-listing and\n  duplicate tombstoning on repeat deletes) and the archive-db namespace\n  is one shared constant (index.ArchiveDBPrefix) instead of three literals.",
          "is_bot": false,
          "headline": "archive/cli/index: review hardening — evidence-gated rebuild, copy-si…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:27:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13f926a5b5657ce94eb05eaa0daf748af1f075c1",
          "body": "…gelog",
          "is_bot": false,
          "headline": "docs: archive status, delete propagation, kill-safety — README + chan…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdf290f02270e406bdaa1e48a95d62009a16c145",
          "body": "…recovered\n\nA push killed at any point must leave a clone the next verb fully recovers.\nThree recovery layers in ensureClone, all prior-art shapes:\n\n- Torn clone: git clone sets up .git and the origin remote early, so a\n  clone killed mid-creation passed the old is-a-repo probe forever. A\n  complete\n[…]\n, and steady state is a clean no-op.\nWedge states that cannot be built by killing deterministically (mid-clone,\nmid-rebase with and without recoverable internals, aged locks) are\nconstructed directly.",
          "is_bot": false,
          "headline": "archive: kill-safe push — torn clones rebuilt, stale operation state …",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:15:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a00f8ee79efbc6fc4ad472664c5cb07f7ec5292",
          "body": "rawclaw archive status reports the remote, the local clone (and whether it\nis usable), this machine's last successful push/pull (stamp-file mtimes,\npush stamp new, written at push success), and one line per machine dir with\nits last commit time. Staleness reuses the same probe and 24h window the\nsea\n[…]\nagree on what stale means. Status is offline by design: recorded\nstate only, no fetch; a missing clone is a reported state, not an error.\n\nThe push verb's output now also reports propagated deletions.",
          "is_bot": false,
          "headline": "archive: status verb — offline freshness report",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:15:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3ed52fe9a05227633b936540f17b3a6f40c80b6",
          "body": "An own session removed by the delete verb (file gone + tombstone recorded)\nis removed from the clone after the copy pass on the next push, so an\nexplicit delete is never resurrected by the archive. Claude sessions are\naddressed by file stem, codex rollouts by their session_meta id via the\ncodex adap\n[…]\nfilter\nthat reaches another machine's archived scopes names the machine, and when\nnothing local matches the delete is refused with a pointer at the origin\nmachine instead of silently deleting nothing.",
          "is_bot": false,
          "headline": "archive: explicit deletes propagate on push; foreign dirs stay read-only",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:14:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa988a6bbb361a528e64b90c54220454efe9f3d3",
          "body": "Foreign machines' archive-scope dbs (the archive- namespace) are read-only\nreplicas; a retained row surfacing from one would let the delete path\ntombstone another machine's session. Skip them with the same filename\npredicate the orphan-db scan already uses.",
          "is_bot": false,
          "headline": "index: retained-session scan never enters archive replica dbs",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:14:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95d9db254265fb25817ae23b4d8af68779dabe22",
          "body": "…autosync, hourly timer, single-writer lock\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge branch 'archive/03-autosync-timer': freshness — sync-on-invoke …",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:12:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9844b768ba11482af117f6cdc77e794a8c36de6b",
          "body": "…escaping\n\nFindings from the pre-merge review pass, applied:\n- cli TestMain sets the autosync kill switch package-wide, so a test that\n  drives a successful search through the real command tree can never exec\n  the TEST BINARY as a detached sync child against a real archive config.\n- The sync child \n[…]\nound sync.\n- Style: timer tool exec is ctx-bounded like the git seam; seam renames\n  (selfExe, autosyncLogLine); wrapped log-open errors; gofmt.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive/cli: review hardening — test-spawn guard, orphan-git margin, …",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:11:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bd5fa0b495479e924fd54a3219e0662012448944",
          "body": "…ject)\n\nOrdinary usage now quietly keeps the archive current: after a successful\nsearch/read/outline prints its results, the CLI fires a DETACHED\nself-invocation (hidden `archive autosync`: push + throttled pull) —\nsetsid on POSIX / detached console on Windows, stdout+stderr appended to\narchive/auto\n[…]\nt=true) — never\nwired silently; --eject removes exactly the registration and rawclaw's\nown files, tolerating already-gone, touching no siblings.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive/cli: sync-on-invoke autosync + hourly timer (enable-timer/--e…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:11:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "745a4f40361f8ae01adf17da802b23d7a9bf885a",
          "body": "Two local processes pushing (or a pull rebasing while a push stages) raced\nover the same clone and its .git/rawclaw-tmp staging dir. A flock on a\nstate-dir lockfile (beside the clone, never inside the deletable clone)\nnow serializes every clone mutation: a second syncer waits briefly, then\nno-ops wi\n[…]\nit, so waiting out a\nholder that just pulled costs zero git. gofrs/flock (cross-platform,\nincl. Windows) rather than a hand-rolled syscall pair.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive: machine-wide single-writer sync lock",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:11:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "efd99ac587f280cd95eae88cd402aa744dacebb9",
          "body": "…the default display posture — tool calls stripped, --include-tools opts in",
          "is_bot": false,
          "headline": "Merge branch 'archive/live-display-align': live session peeks follow …",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:09:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "570c9f94c21da9bb35e54d7c8ee6081541f1255b",
          "body": "…ture\n\nReview follow-ups. A turn that is nothing but tool calls strips to\nempty under the new default, and rendering it as a blank timestamped\nline made a tool-heavy tail read as a dead session — skip empty turns\n(the posture read already takes) and say how many were hidden, naming\nthe opt-in. Terser --include-tools help matching the family voice.\nREADME + the unreleased changelog entry stop claiming the human render\nis raw bytes: raw is what --json carries.",
          "is_bot": false,
          "headline": "live: skip tool-only turns in the default render; docs follow the pos…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T03:06:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "213a127228b870376a83343e3660b83ff866094b",
          "body": "… opts in\n\nThe live session render hardcoded tools-on, diverging from the default\ndisplay posture of every other surface (read, outline, search snippets):\nconversation only, with --include-tools as the explicit opt-in.\n\nAlign it: the serve half strips tool runs from the human render unless\n--include\n[…]\ninst\na remote that predates the flag; a remote failing on the unknown flag\nis classified as the existing too-old story (run rawclaw upgrade).\nThe flag on a list is a loud usage error, matching --tail.",
          "is_bot": false,
          "headline": "live: strip tool calls from session peeks by default, --include-tools…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:57:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0065b1986d0a89a73fb056c15425d58f787fe1dd",
          "body": "…fer, watchdog child reaping, atomic config write",
          "is_bot": false,
          "headline": "Merge branch 'archive/hardening-pass-1': hardening — bounded list buf…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:48:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83813a89c056a1bd4546e5a11df5e77ff6c3678a",
          "body": "…le tests\n\n- runGit: context cancellation now delivers SIGTERM (git removes its lock\n  files on the way out - verified: SIGKILL strands .git/index.lock, SIGTERM\n  does not), with WaitDelay as the hard-kill backstop. Without this, a\n  deadline firing mid-git-mutation could wedge the managed clone.\n- \n[…]\n.\n- comment accuracy: the run-context kill covers direct children, not whole\n  process trees; the grace waits for the kill to land, not to reap.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "review pass: git lock-safe cancellation, scratch-file hygiene, portab…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:47:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "309d68180462769ad7ec336b1c758bcbef3247bf",
          "body": "The config landed via a direct truncate-and-write, so a process killed\nmid-write could leave a torn archive-config.json - rejected by Load on every\nlater run until the file is removed by hand. The bytes now land in a scratch\nfile beside the config and rename swaps it in: same-directory rename is\nato\n[…]\n interrupted write leaves either the old config or the new one.\nA stray scratch file from a kill in the window is overwritten by the next\nwrite.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive: write the config atomically",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:46:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "39c0d03101abddbe4fb81ea5e3f599c59b9fca48",
          "body": "List buffered the remote's entire stdout before parsing, so a broken or\nhostile remote streaming unbounded output could exhaust local memory. The\nlist now lands in a capped buffer (8 MiB - orders of magnitude above any\nreal session list); the write that would exceed the cap is refused, which\nstops t\n[…]\n reports a clear over-limit story instead of a\nmisclassified transport error. Session peeks already stream through\nunbuffered and are untouched.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "live: bound the buffered session-list response",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:46:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5e867d3cf2d8c999845fa65a77d638879397ebfe",
          "body": "The watchdog's exit(124) terminated the rawclaw process but left any child\nstarted for the run (the ssh a live peek dials) running as an orphan - with\nthe remote serving process alive behind it whenever the remote produced no\nfurther output to trip a pipe error. startWatchdog now returns the run's\nc\n[…]\nxt kills the child - with a short grace before\nexit(124) for the kill to land. A helper-process test proves a child cannot\noutlive the deadline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "cli: watchdog deadline reaps child processes before exit",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:46:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0292c3cba975cb0c01656b974152f6382e345a96",
          "body": "…e transcript archive\n\narchive pull (throttled variant included) + foreign machine dirs enumerated\nas searchable scopes with origin_machine stamped from each dir's manifest;\nread/outline/resume handle foreign sessions; stale dirs reported through the\nexisting stale-fallback posture.",
          "is_bot": false,
          "headline": "Merge branch 'archive/02-foreign-scopes': cross-machine search via th…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:25:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c219e75513d32284e1436dd8052ca105c34a982e",
          "body": "…covered\n\nA peer machine that re-registers under a new name leaves its old dir in the\narchive forever (nothing prunes); both dirs claim one machine id and identical\nsession files, which double-listed every pre-rename session under an id no\nprefix could disambiguate — dirs now dedupe by manifest mach\n[…]\ncal stamp and corrupt provenance). A clone\nleft mid-rebase by a kill is aborted by the next verb that touches it, and\nin-process rebase aborts run on a fresh context so a canceled ctx can't skip\nthem.",
          "is_bot": false,
          "headline": "archive: bug-hunt fixes — renamed-peer dirs deduped, wedged rebase re…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:23:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb52da1c9e3eb088ac929dfa7f9c0151ca773a5b",
          "body": "Pinned LC_ALL=C on the git runner so output classification survives non-English\nlocales; Pull's report is now two honest states (remote consulted vs throttled\nskip — an empty remote reads as verified-fresh) with named returns; foreign\ntree listing uses os.ReadDir instead of Glob so a metachar in a p\n[…]\nopes; unreadable clone listing warns before\ndegrading; --json honored on the foreign-resume multi-match branch; dirStale\ntakes a ctx; test cleanup via defer; WithOrigin naming for the ingest variants.",
          "is_bot": false,
          "headline": "archive/cli/index: review fixes",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:23:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cd7d5bf229ae92257790992c030a850b416e4c11",
          "body": "`rawclaw archive pull` refreshes the clone (explicit always pulls;\n--throttle honors the stamp window for background callers; unconfigured is a\nclean no-op). --resume falls back to the archive replicas when nothing local\nmatches and degrades with the owning machine's name plus the command to run\nthere. README + changelog cover cross-machine search.",
          "is_bot": false,
          "headline": "cli: archive pull verb + foreign-session resume degrade; docs",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67b7a0a2f575ee8391692f08c736a2e67d211a05",
          "body": "Foreign sessions surface in plain search under their machine label, read and\noutline resolve foreign refs, local sessions never duplicate, and a stale\nforeign dir is reported through the stale-fallback posture with results still\nserved. Shared fixture in archive/archivetest.",
          "is_bot": false,
          "headline": "agentproto: cross-machine search/read/outline exercised end-to-end",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3928ab3e97bd7961c8b1dd06678344e945e893e0",
          "body": "…lve stale\n\nAll() unions the archive's foreign machine scopes (source filter applies\nper-scope); Resolve maps a Stale replica to IndexStale so the existing\nstale-fallback posture reports it while still serving results; the Claude\norphan-db scan skips archive-namespaced dbs (their live source is the clone,\nnot a purged project).",
          "is_bot": false,
          "headline": "scopes: splice archive replicas into enumeration; stale replicas reso…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1956f2d64c3f1d665f42ebc361a5bc6528745493",
          "body": "Pull refreshes the clone (re-clones a deleted one) with a stamp-file throttle\n(mtime + 5-min window; throttle=false always pulls; empty remote is a clean\nno-op; failed rebases aborted). Scopes enumerates FOREIGN machine dirs only —\nown dir and any dir whose manifest claims our machine id are exclude\n[…]\nit is older than 24h is\nflagged stale (enumerated and served, reported through the scope status).\nview.Scope carries Origin/OriginName/Stale; the Codex adapter gains\nDiscoverRoot for replicated trees.",
          "is_bot": false,
          "headline": "archive: pull verb + foreign machine dirs as searchable scopes",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:23:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a8c7102622e3ff964f4a924c27c600bf3bf8f23d",
          "body": "EnsureIndexedTree generalizes EnsureIndexed (explicit db path + origin);\nEnsureIndexedContainers gains an origin param. Empty origin keeps the\nlocal-machine stamp byte-identical. This is the provenance seam a replicated\ntranscript tree indexes through so its rows carry the tree owner's identity.",
          "is_bot": false,
          "headline": "index: injectable origin_machine on both ingest paths",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf31a5206dd95c23624cae1a2e6e72cb5d71ad3c",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge branch 'archive/04-live-peek': rawclaw live — direct-SSH live peek",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:15:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0a748fd355e0ff73b4c339cebec0464998530273",
          "body": "…lenient ssh-map config\n\nBug-hunt + review findings: a flag-shaped session prefix now crosses the pipe\nas a positional (literal --); the remote serve run gets --timeout 0 (the local\nwatchdog + ssh already bound it, and the remote's own 30s default would kill a\nlong render with advice no local flag c\n[…]\n bare name; empty prefix rejected;\nambiguous listing capped; cross-mode flags rejected loudly; loopback test pins\nhost-key state to a temp file.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "live: review hardening — prefix behind --, remote watchdog disarmed, …",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T02:14:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e6da115097b9325f76776ddf4839516ffa3f1dcb",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "live: CLI verb + docs — rawclaw live <machine> [session-prefix]",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T01:57:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5a153b63adcefd9bba9688c8e30dc303b7ae6466",
          "body": "…ailure stories\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "live: client half — ssh dial, list render, session stream, distinct f…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T01:53:38Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6edba5252f01654be677e5fe8a7b0bdab6429c94",
          "body": "… files\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "live: serving half — list + render local sessions from the transcript…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T01:51:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2e3e6934b02ec6ed7128cf7ea5592127d963bc38",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive: ssh destination map in config (live-peek name resolution)",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T01:48:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d72c03f859bf4edff89407b57b1a05a922712476",
          "body": "… (archive init + push)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge branch 'archive/01-init-push-tracer': transcript archive tracer…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T01:35:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "802999ff9d584024cdd5232fc83b07a386e2d6c9",
          "body": "…temps, remote drift refused\n\nThree real failure shapes closed:\n- A commit whose push failed (network down, kill mid-push) was stranded\n  forever on a machine that stopped producing new transcripts: the\n  nothing-staged path now checks whether HEAD is ahead of the remote-tracking\n  branch and pushes\n[…]\nclone); the copy loop\nhonors context cancellation between files; the quick-check comment states the\nhead+tail fingerprint's blind spot honestly.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive: bug-hunt fixes — stranded commits recovered, kill-safe copy …",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T01:35:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ce0f4a9115ea58beac0fd4abb76e936461783939",
          "body": "… named subtests\n\nThe machine name flows into `git add/status -- <name>` as a pathspec, so an\nexplicit --name carrying glob characters ('ma*') could stage other machines'\ndirs: names are now restricted to [A-Za-z0-9._-] (dots may not lead). The\nunreadable-config error keeps its cause chain (%w); cop\n[…]\nto create the (private) repo on the host first; the archive\nverb's help text disambiguates the session-file form from the init/push\nsubcommands.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive: review fixes — pathspec-safe names, chain-preserving errors,…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T01:26:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64b190c5a8d043e063a8cb667cb71b07b1b53c04",
          "body": "The README carries the same the-remote-must-be-PRIVATE statement archive init\nprints (the warning is the mechanism; no host-side visibility detection).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: archive tracer — README section + changelog entry",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T01:19:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b6c13ad3118d059d0dbe6e7d149a1ebc07ae7bcf",
          "body": "New internal/archive module: one git repository shared by all of a user's\nmachines, one top-level dir per machine (<machine>/<source>/...), the durable\nhome for raw transcript bytes. Load() resolves config (env + config file) and\nreturns nil when unconfigured — feature off costs one nil-check. PushL\n[…]\nession-file form still routes to the parent).\nInit prints the private-repo privacy warning; unconfigured push is a clean\nno-op pointing at init.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "archive: init + push tracer — transcripts land in a git remote",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-19T01:19:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "27766670d5e83cc3e9af1d30fcb0537104ae0036",
          "body": "Closes the two gaps reported earlier: semantic's churn/prune fixtures drop\ntheir last raw DELETEs, and the vec meta stamp value is asserted where\nthe schema lives.",
          "is_bot": false,
          "headline": "storetest: add DeleteMessage helper; pin vec_schema_version stamp",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:50:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6ceb21931e6eb83632be8c977dd2e7f2f3b0eff",
          "body": "…re surface",
          "is_bot": false,
          "headline": "Merge branch 'refactor/migrate-semantic-cli': semantic + cli onto sto…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:48:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f07212dc5fefec60ef07597d74c8c210887173b0",
          "body": "codexResumeHits' sessions query moves to store.SessionsByPrefix\n(top-level only, limit 3); cli's private openRW is retired for\nstore.ConnectRW (D2's approved 10s superset) in the reindex vector pass\nand tag-write; loadSessionMessages moves to store.SessionMessages and\ntagMsg is replaced by store.SessionMessage. Tag test fixtures move to\nstoretest.NewDB/InsertSession/InsertMessage.",
          "is_bot": false,
          "headline": "cli: adopt store connections + typed reads",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:46:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e78cad833b8f960fe97248515bc2703997ef5b1",
          "body": "VecIndex's five SQL sites move to store.AllMessages/VecAll/VecPrune/\nVecRefreshMsgID/VecUpsert; VecKNN's scan moves to store.VecAll (fully\ndrained before the per-candidate store.MessageMeta existence checks, so\nthe single-conn D3 invariant holds). semantic's EnsureVecSchema/\nHasVectors/VecSchemaVers\n[…]\ne\nto storetest.NewDB/InsertSession/InsertMessage/SetSessionField; the\nthree DELETE FROM messages fixture mutations stay raw pending a\nstoretest message-delete helper (D8 forbids adding one from here).",
          "is_bot": false,
          "headline": "semantic: route chunk_vec SQL through store",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:46:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed7770e8e9823c72f845ea9e8a9fe3a75c499853",
          "body": "…eads",
          "is_bot": false,
          "headline": "Merge branch 'refactor/migrate-retrieve': retrieve onto store typed r…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:42:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e68c7ae5adf0578c22aac4f3e53cf557506198ce",
          "body": "…ed reads",
          "is_bot": false,
          "headline": "Merge branch 'refactor/migrate-agentproto': agentproto onto store typ…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:42:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa386a1555df278a2a065c5dd4909a965c6d3642",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'refactor/migrate-view': view onto store typed reads",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:42:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26145ce90a6a69659b77e03e7fc6d69cc9e203ae",
          "body": "Migrate every inline SQL site onto the store read surface:\nresolveUUID -> store.ResolveMessageUUID (limit 2, git-style 0/1/2\nsemantics kept), locateSession -> store.SessionsByPrefix (per-scope\nlimit 2, cross-scope aggregation and ErrAmbiguousSession /\nErrSessionNotFound unchanged), sessionMeta -> st\n[…]\nExist / store.MessageUUID.\n\nDrop the dead thisScope helper (the pre-existing unused lint finding)\nand the now-unneeded context/os/paths imports. Zero raw table-name SQL\nremains in internal/agentproto.",
          "is_bot": false,
          "headline": "agentproto: swap raw SQL for store typed reads",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:41:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "05428772de0065b5f67ec3fdcda8ecfc27db396e",
          "body": "searchScored -> store.SearchHits, MatchAnchors -> store.SearchAnchors\n(SearchParams mapped onto store.Filter/Sort; OR-expansion, coverage\nre-rank, and snippet/scoring logic stay retrieve-side), LineageRoot's\nparent walk -> store.ParentOf (64-hop guard kept). Private openRO\nretired for store.ConnectRO — adds busy_timeout(5000), the D2-approved\ndelta. Test fixtures move onto storetest.NewDB/InsertSession/\nInsertMessage; retrieve now carries zero raw SQL.",
          "is_bot": false,
          "headline": "retrieve: swap FTS SQL for store typed reads",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:41:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ff161aa61ab9dd12d87057c880f7e67e988aa9b",
          "body": "BuildAnchoredView's four window/bookend queries move to store.MessagesBefore/\nMessagesAfter/BookendMessages, Browse's sessions query to store.BrowseSessions\n(which drains before returning, preserving the single-conn drain-then-preview\ninvariant), and sessionPreview to store.FirstUserMessages. readMs\n[…]\n. Test fixtures migrate from a\nhand-rolled messages table to storetest's production schema (D7), pinning\nfixture rowids against the seedMsg ids.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "view: swap raw SQL for store typed reads",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:40:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "90fa5b5f177adfb65340bd95ade687846b050764",
          "body": "…oretest fixtures",
          "is_bot": false,
          "headline": "Merge branch 'refactor/store-reads': typed read surface on store + st…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:34:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6e7ffb69407866568a4dcf3a378d3c6d6a0c871",
          "body": "Add internal/store/storetest (D7): NewDB builds a production-schema db\nvia store.ConnectRW + store.Rebuild (base schema + FTS + version\nstamp), InsertSession / InsertMessage (uuid included) insert fixture\nrows, and SetSessionField mutates the allowlisted durable-retention\ncolumns (missing_since / or\n[…]\nontent filters, empty results, and\nthe missing-table degrade paths (TopicRowsExist, HasVectors, VecAll).\nPlus the repo-standard goleak TestMain.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "storetest: interface-built fixtures",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:33:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2e70c3b8ecc3cf3f45471de5213126e6557a51ac",
          "body": "Move the topic query surface (TopicSegment/TopicHit,\nUpsertTopicSegment, TopicsForSession, MatchTopics, TopicForMessage)\nand the corpus counters (CorpusStats, CountSessions,\nCountTopLevelSessions, GetCorpusStats) from internal/index into\ninternal/store (D6) — pure code motion, SQL and degrade semant\n[…]\nts stay in index for now: they drive the moved\nsurface through index's EnsureIndexed/EnsureSchema orchestration,\nwhose fixtures are future work.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "store: absorb topic + stats query surface from index",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:33:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c45728829affb82bea353e8aa4a148c253eee37c",
          "body": "Add the store read/write seam so consumer packages can drop their\nraw SQL: sessions (BrowseSessions, SessionsByPrefix,\nSessionMeta, ParentOf), messages (MessagesBefore/After,\nBookendMessages with optional bound, FirstUserMessages,\nSessionMessages, AllMessages, ResolveMessageUUID, MessageUUID,\nMessag\n[…]\ns -> 10s, the superset of index's old 5s and cli.openRW's 10s. Both\nopeners now document the single-conn drain-before-next-query\ninvariant (D3).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "store: typed read surface for sessions/messages/fts/vectors",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:33:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8a578ba98b1cee1784e6a2ffff95c3ffb7f3d708",
          "body": "…ion/provenance",
          "is_bot": false,
          "headline": "Merge branch 'refactor/store-carveout': split index into store/retent…",
          "author_name": "MoonCaves",
          "author_login": "MoonCaves",
          "committed_at": "2026-07-18T14:17:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 8,
      "commits_last_year": 167,
      "latest_release_at": "2026-07-20T17:27:23Z",
      "latest_release_tag": "v0.7.1",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 5,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 0.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/MoonCaves/rawclaw",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/MoonCaves/rawclaw",
          "is_deprecated": false,
          "latest_version": "v0.7.1",
          "repository_url": "https://github.com/MoonCaves/rawclaw",
          "versions_count": 8,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-20T17:24:49Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 50003,
      "source_files_sampled": 177,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 4790
    },
    "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/gofrs/flock",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.13.0"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "github.com/spf13/pflag",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.9"
        },
        {
          "name": "go.uber.org/goleak",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.0"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.41.0"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.45.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 1,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "MoonCaves",
          "commits": 167,
          "avatar_url": "https://avatars.githubusercontent.com/u/144150401?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.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": 10,
            "reason": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 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/28 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": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 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": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "bb4d23497e5595d174969d1bc1be33e67d7db1bd",
        "ran_at": "2026-07-26T05:19:51Z",
        "aggregate_score": 3.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T04:04:22Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-23T04:03:41Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/MoonCaves/rawclaw",
    "host": "github.com",
    "name": "rawclaw",
    "owner": "MoonCaves"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 54,
      "inputs": {
        "security": 33,
        "vitality": 71,
        "community": 33,
        "governance": 50,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 71,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "commits_last_year": 167,
              "human_commit_share": 1,
              "days_since_last_push": 3,
              "active_weeks_last_year": 5
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "5/52 weeks with commits",
                "points": 3.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "167 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 167
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 8,
              "latest_release_tag": "v0.7.1",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 0.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "8 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 33,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "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": 18,
                "status": "met",
                "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 50,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 1,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1/1 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1,
                      "decided": 1
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 34,
            "inputs": {
              "followers": 1,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "MoonCaves",
              "public_repos": 16,
              "account_age_days": 1054
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1 followers of MoonCaves",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "MoonCaves"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "16 public repos, account ~2 yr old",
                "points": 14.7,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 16
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 2
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/MoonCaves/rawclaw"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "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 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "8 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "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": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "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": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 33,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 33,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "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/28 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": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 84,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.87,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 4790
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "87 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 87,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.36,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod"
                    }
                  }
                ],
                "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": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "36 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 36,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 50003,
              "source_files_sampled": 177,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/177 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 177,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T05:19:57.643156Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/MoonCaves/rawclaw.svg",
  "full_name": "MoonCaves/rawclaw",
  "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.