Public record
Software health reportschema 0.26.0 · metrics 1.13.0 · 2026-07-22 11:21 UTC

ColeSpringer / WaxLabel

Audio metadata library and CLI for tags, cover art, and linting in GO.

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

ColeSpringer/WaxLabel holds a health index of 46 out of 100, placing it in the At risk band. It scores highest on Vitality (71/100) and lowest on Community & Adoption (24/100). It was last updated 4 days ago. A single contributor accounts for most of its recent work.

46
overall / 100
At risk

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.

46
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

Cole SpringerPersonal account
0 followers6 public repossince Nov 2021

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/colespringer/waxlabelv1.2.0-34 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 4 days ago
4.2/36Commit cadence — 6/52 weeks with commits
17.6/18Commit volume — 90 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_year90
human_commit_share1
days_since_last_push4
active_weeks_last_year6
How it's scored
27/27Ships releases — 3 releases published
36/36Release recency — latest release 4 days ago
27/27Release cadence — a release every ~3 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count3
latest_release_tagv1.2.0
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases3

Community & Adoption

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

24Critical · 18% of overall
How it's scored
0/60Stars — 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)
0/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

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

30At risk · 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
0/38.3PR acceptance — no decided pull requests or no data
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
0/25Owner reach — 0 followers of ColeSpringer
15.6/25Track record — 6 public repos, account ~4 yr old
Inputs used
followers0
owner_typeUser
is_verified
owner_loginColeSpringer
public_repos6
account_age_days1,717
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 4 days ago
12/20Version history — 3 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesgithub.com/colespringer/waxlabel
ecosystemsgo
any_deprecatedno
min_days_since_publish4

Engineering Quality

Are baseline engineering and documentation practices in place?

66Moderate · 20% of overall
How it's scored
24/24CI workflows — 2 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.
How it's scored
30/30README
0/25Documentation directory
15/15Documentation / homepage site — https://github.com/ColeSpringer/WaxLabel
10/10Repository description
10/10Topics — 18 topics
10/10Wiki
Inputs used
topicsaac, aiff, audio, cli, flac, go, golang, id3, m4a, m4b, matroska, metadata, mp3, mp4, ogg, tags, wav, webm
has_wikiyes
homepagehttps://github.com/ColeSpringer/WaxLabel
has_readmeyes
has_docs_dirno
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
0/2.5CI-Tests — no data
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5License — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — no data
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3.3
Excluded from scoring (no data or not applicable): ci_tests, packaging. Remaining weights renormalized.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score.

58Moderate · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 74 of 90 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.822
agent_instruction_files
agent_instruction_max_bytes
How it's scored
12.6/18One-command bootstrap — go.mod (toolchain convention, no task runner)
22/22Automated tests
0/11Lint / format config
11/11Static type checking — Go (statically typed)
10/10Reproducible environment — lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 90
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_configno
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
How it's scored
45/45Type-checkable code — Go (statically typed)
54.4/55Manageable file sizes — 4/364 source files over 60KB
Inputs used
primary_languageGo
largest_source_bytes80,795
source_files_sampled364
oversized_source_files4

Key facts

0GitHub stars
1contributors
90commits, last 12 months
4days since last push
3releases
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-22 11:21 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/aCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/aPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direct dependencies 2
RegistryPackageVersion constraintManifest
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogithub.com/spf13/pflagv1.0.9go.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": [
        "aac",
        "aiff",
        "audio",
        "cli",
        "flac",
        "go",
        "golang",
        "id3",
        "m4a",
        "m4b",
        "matroska",
        "metadata",
        "mp3",
        "mp4",
        "ogg",
        "tags",
        "wav",
        "webm"
      ],
      "is_fork": false,
      "size_kb": 4210,
      "has_wiki": true,
      "homepage": "https://github.com/ColeSpringer/WaxLabel",
      "languages": {
        "Go": 3629323
      },
      "pushed_at": "2026-07-17T19:53:10Z",
      "created_at": "2026-06-17T07:24:59Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T19:48:35Z",
      "description": "Audio metadata library and CLI for tags, cover art, and linting in GO.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "https://www.springerspace.com/",
      "name": "Cole Springer",
      "type": "User",
      "login": "ColeSpringer",
      "company": null,
      "location": "Rochester, MN",
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/93888664?v=4",
      "created_at": "2021-11-07T23:17:05Z",
      "is_verified": null,
      "public_repos": 6,
      "account_age_days": 1717
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-07-17T19:55:28Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-07-17T16:57:47Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-07-11T18:28:34Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "73092460169e9a0484229ab13a0253651b818e5e",
          "body": "Register PRODUCER, ENGINEER, MIXER, ARRANGER, WRITER, and DJMIXER as writable,\nmultivalued keys. On ID3 the first five map to the involved-people list (TIPL in\nv2.4, IPLS in v2.3) with Picard's involvement strings, preserving unmodeled\ninvolvements when a role is edited; WRITER uses a TXXX:Writer frame. Parity\nacross MP4 freeforms, Vorbis/Matroska identity, and APE, with DJMIXER spelling\nvariants folded on read.",
          "is_bot": false,
          "headline": "Add six contributor-role tag keys with ID3 involved-people support",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-17T19:47:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03a1455789bafc8c4e675bd81d83f183da2bb511",
          "body": "Bump actions/checkout and actions/setup-go to v7 (Node 24) across CI and release, and add --draft to the release workflow's fallback create so a bare tag push lands a draft instead of auto-publishing.",
          "is_bot": false,
          "headline": "Update workflow actions to v7 and draft releases by default",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-17T17:04:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9adccd12dad41cdf4f3c39fdf10181d181ae404",
          "body": null,
          "is_bot": false,
          "headline": "Add CHANGELOG entry for v1.1.0",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-17T16:53:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6912192d24abe40ca8c7d705b202a5656958d06e",
          "body": "Register a writable, multivalued LYRICIST key modeled on COMPOSER, with parity across formats: ID3 TEXT frame, MP4 freeform, Vorbis/Matroska identity, WAV/AIFF via embedded ID3, and APE. A legacy TXXX:LYRICIST frame reads onto LYRICIST and re-renders as the conformant TEXT frame on the next edit that touches it.",
          "is_bot": false,
          "headline": "Add canonical LYRICIST tag key",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-17T16:47:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "503a4ccd3e1f36d1c9ec3fce126329a1b169ab3b",
          "body": null,
          "is_bot": false,
          "headline": "automatic github release builds",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-11T19:01:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72b73ef95c5dbb9ca4ec79fb06aa1b8b396a2f3d",
          "body": "Three files had comment-tail alignment and one long closure that gofmt normalizes. The fourth wrote ['' ] in a doc comment to denote a one-element list holding an empty string, but gofmt's doc-comment formatter rewrites the paired single quotes into a typographic close quote; that notation is switched to the double-quote form already used elsewhere so the tree is gofmt-clean without changing the intended meaning.",
          "is_bot": false,
          "headline": "Make test files gofmt-clean",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-11T18:27:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c4cf7fa9cbbc4eccea1d1216cad6d8afc3da21f",
          "body": "- Warn (and fail --strict) when an ID3 trailing empty value, a partially\n  dropped LRC file, or a --remove-picture role match is silently lost\n- Normalize recognized COMPILATION booleans to 1/0 on FLAC and ID3 so\n  copy and diff agree with MP4\n- Reject MEDIATYPE (stik) values above 255 instead of widening the atom\n- Capture and strip a full stacked ID3v1 run in one pass\n- Note intentional numeric-diff and set self-overwrite behaviors in CLI help",
          "is_bot": false,
          "headline": "Surface silently-dropped edits and tighten format conformance",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-11T18:14:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75285309f411d7b3bc626de8d9b29d743d670703",
          "body": "…n carry, VBR CRC\n\n- lint --fix strips a legacy container only when it is fully redundant with the\n  canonical tags; dump, lint, and JSON now surface legacy-only tags and opaque\n  legacy content instead of hiding them behind a bare (none)\n- MP4: de-duplicate preserved ilst atoms against the rebuilt \n[…]\n(lint still flags the result)\n- MP3 VBR: probe both Xing/Info offsets so a CRC-protected frame reports the\n  right duration\n- the post-write Document now matches a fresh parse for these legacy signals",
          "is_bot": false,
          "headline": "Preserve and surface legacy-only metadata; fix MP4 dup atom, copy ico…",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-11T10:13:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d0c5558af9a39e891ea3785969f5feb5f0a01603",
          "body": null,
          "is_bot": false,
          "headline": "Update readme",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-10T23:27:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35c316897c7db15f480a76c454865216fcf257b5",
          "body": "- diff: scope the numeric fold to MP4 pairs and fold MEDIATYPE, so a\n  text-to-text comparison no longer reports differing files as identical\n- MP4: drop a malformed slashed number whole instead of fabricating a\n  phantom TRACKTOTAL from the tail\n- ID3: serialize a bounded end for a past/at-duration\n[…]\nio file gracefully instead of an opaque\n  write refusal\n- README: correct the invalid-picture description and note two\n  zero-loss cross-format quirks\n- add a copy/diff canonical-agreement matrix test",
          "is_bot": false,
          "headline": "Fix diff/copy agreement, MP4 number pairs, and chapter serialization",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-10T23:20:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d0608e6eb29dff8e22fda3e335101d108c13886e",
          "body": null,
          "is_bot": false,
          "headline": "Avoid temporary string concat in synced-lyrics test loop",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-10T20:24:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "587a36af357117ba2250e5d99c2af041fd2335f8",
          "body": "The >= math.MaxInt64 comparison had dead code: an int64 can never exceed\nMaxInt64, so the check is exactly equality. Switch to == to say what is\nmeant and quiet static analysis.",
          "is_bot": false,
          "headline": "Use equality for int64 ceiling checks in stream ingest bounds",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-10T20:19:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3ec5e8aa28652081c87f210e3ef90f02dc3b206",
          "body": "- copy warns on chapters past the destination duration and opens run-to-EOF\n  trailing ends so copy-then-diff agree on the chapter axis\n- set drops MP4 covers in formats it cannot label (GIF/WebP) with a warning\n  instead of aborting the whole edit\n- no-op plan/set/copy report \"operations\": [] in JSON\n- dump surfaces FLAC padding and picture depth/colors\n- fix genre de-dup, PlayCount overflow, and the negative --max-size message\n- add typed accessors for 8 tag keys, plus README corrections",
          "is_bot": false,
          "headline": "Add export-picture command and tighten copy, set, and dump behavior",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-10T17:41:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d55b22ebacc271c1733fa34eeb5bc8f4eb874f7a",
          "body": "…cases\n\n- Matroska: capture raw only for top-level SimpleTags so deeply nested tags stay bounded in memory\n- set and plan drop synced lyrics, chapters, or cover art a format cannot store, with a warning like copy; --strict re-escalates\n- --clear-synced-lyrics clears the inherited ID3 language; an ov\n[…]\nading-zero or sign-only track/disc number as equal across formats\n- add an input-too-large exit code for a streamed input over --max-size\n- note a multi-valued MP4 field written as multiple data atoms",
          "is_bot": false,
          "headline": "Drop unstorable structural edits with warnings and fix metadata edge …",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-10T13:27:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a352952323bec8a2d93d4a07221af86dec3588d",
          "body": "- Cap OpenSource and buffered stdin at 2 GiB by default (WithMaxSourceBytes /\n  --max-size, 0 disables) so an endless stream errors instead of exhausting memory.\n- Grade writer-dropped values accurately in the copy transfer report: Matroska\n  multi-value TITLE (lossy), Vorbis reserved-namespace keys\n[…]\nan edit is unstorable, still warning.\n- Warn on read-truncated synced lyrics and on an undefined ID3 language marker; show\n  set and line counts in the dump header.\n- diff/set help and README updates.",
          "is_bot": false,
          "headline": "Bound stream ingest and tighten copy, MP4, and synced-lyrics behavior",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-09T22:04:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed0ad9efaa7bc0f9417b6df7c977d770cc1ac1f3",
          "body": "- Tighten ID3 numeric-genre parsing and keep parenthesized tokens verbatim\n- Start-sort projected ID3 chapters and guard chapter ends on write\n- Preserve coincident-start authored chapter ends through reconcile\n- Reject embedded NULs in synced-lyric text instead of truncating SYLT\n- Make MP4 rewrite\n[…]\n Suppress the no-audio-files note under --json\n- Grade pictures, chapters, and synced lyrics per item in transfer reports\n- Gate WAV/AIFF/MP3/AAC report ops on change flags via shared id3.ContainerOps",
          "is_bot": false,
          "headline": "Fix metadata edge cases and unify report grading across codecs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-09T17:56:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "40179ff9fd1e156b5fc85dce51d95540d535eae6",
          "body": "- MP4 trkn/disk: grade a normalized number (leading zero or sign) as lossy so copy agrees with diff, and warn on a direct set with the stored value\n- Transfer: count pictures per image so a mixed front+back set reports 1 carried, 1 lossy instead of flipping the whole set\n- ID3 SYLT: keep the existin\n[…]\npare by canonical normalized form so equality is transitive across files of differing durations\n- Docs: note the MP4 QuickTime chapter empty-edit limitation and the ID3 CHAP coincident-start asymmetry",
          "is_bot": false,
          "headline": "Fix transfer/diff report accuracy and metadata-preservation edge cases",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-09T13:59:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "39449845fea28ef8e3c3bc2cf847eb3fc0b02bbb",
          "body": "- ID3 CHAP fills open-ended chapters at write time (interior to the next\n  start, trailing to the media duration) instead of the 0xFFFFFFFF sentinel\n  that spec-conforming readers took literally as ~49.7 days.\n- diff compares chapters modulo reconstructable ends so it agrees with copy;\n  byte-identi\n[…]\nrejects an unknown shell name with exit 2, like other topics.\n- keys lists each canonical key's accepted aliases.\n- README: note stale legacy ID3v1/APEv2 tags after an edit and SYLT language handling.",
          "is_bot": false,
          "headline": "Serialize bounded ID3 chapter ends instead of the 49.7-day sentinel",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-08T21:52:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "05e975a2bd238cccccff5fa625713dee1f1c2409",
          "body": "- report a dropped per-chapter language as a lossy carry on every format, so\n  FLAC/Ogg/MP4 grade a copy the same way MP3/AAC/WAV already do\n- require --overwrite for an -o target that is a hardlink of the input, comparing\n  canonical paths rather than inode identity; an unreadable cwd fails safe in\n[…]\nand help fixes: --add-chapter end preservation, synced-lyrics-lang shape\n  validation, --padding reserving at least N bytes with a 64 MiB ceiling, and the\n  MP4 0-as-unset and chapter-loss model notes",
          "is_bot": false,
          "headline": "Fix transfer-report accuracy and -o overwrite edge cases",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-08T17:56:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ecba72b635d2f52d67f63e55d0d6afea8ed1cb4b",
          "body": "- WAV LIST/INFO parsing now honors the element limit, so a crafted chunk cannot force unbounded allocation\n- Matroska/WebM tags holding invalid UTF-8 no longer duplicate on every edit\n- inserting a chapter between ended chapters truncates the stale overlap and reports it; MP4 no longer warns chapter\n[…]\ncolor table; FLAC --no-padding omits the empty PADDING block\n- --set notes when two aliased spellings of the same field disagree\n- remove internal review-finding citations from comments and test names",
          "is_bot": false,
          "headline": "Fix metadata read/write edge cases across codecs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-08T13:47:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6bf99c2b039dda6bc72ebf2a43893616f9090541",
          "body": "- copy/plan reports now match what is written: SYLT language on cross-format\n  lyric carries, MP4 chapter end-times, non-boolean COMPILATION (coerced to 0,\n  not dropped), and clamped synced-lyric timestamps\n- MP4 chapters authored past the file duration or the 32-bit movie timescale\n  round-trip ex\n[…]\n the chapter/picture/lyric counts with a changed flag\n- doc and help fixes: lint exit codes, SaveAsFile overwrite, number-pair\n  multi-value scope, invalid-picture wording, and --add-chapter end times",
          "is_bot": false,
          "headline": "Fix report accuracy and round-trip edge cases across codecs and CLI",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-08T06:57:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff23a5bde8b43b65aad1eadec583af83ac070fb3",
          "body": "- FLAC/Ogg: a reserved namespace (chapters, synced lyrics, cover art) set via\n  --set now drops with a value-dropped warning instead of silently vanishing or\n  overwriting an existing picture comment; folded into one reservedNamespace helper\n- MP4: match freeform tag names case-insensitively on read\n[…]\negment reports no audio extent, matching a fresh parse\n- Share one normalizeKey across the id3/mp4/matroska/vorbis read paths\n- Add an ID3 top-level parse fuzzer and a Matroska unknown-size write test",
          "is_bot": false,
          "headline": "Fix codec write-path edge cases and unify tag-key normalization",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-07T17:10:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a3c0465b4c73f0d546525003aa1b4a069b0116d1",
          "body": "- ID3v2.2: mark re-read space-padded (non-conformant) frame IDs opaque, so an\n  unknown v2.2 frame stays preserved verbatim and never surfaces as a phantom\n  tag on re-read, in dump, or in diff.\n- FLAC: collapse duplicate VORBIS_COMMENT blocks on any rewrite (picture-,\n  padding-, or legacy-only edi\n[…]\nit instead\n  of the write default, keeping save-back change detection strong under\n  WithLimits.\n- Warn when an edit's explicit TRACKTOTAL/DISCTOTAL numerically disagrees with\n  a slash-derived total.",
          "is_bot": false,
          "headline": "Fix tag preservation and change-detection edge cases",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-04T01:54:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4264593f07a3d907197000d76dacb4692fc503a7",
          "body": "SaveAsFile and WriteTo now verify the on-disk source is unchanged since\nparse, as SaveBack does, so a source changed under the parsed document can\nno longer silently corrupt the output. In-place writes keep the full check;\nderived writes compare inode+size+fingerprint only (new\nIdentity.MatchesConte\n[…]\nfirst value.\n- Ogg: reject oversized cover art at write with ErrPictureTooLarge, floored\n  at the largest already-parsed cover.\n- CLI: reword the --synced-lyrics-lang error to promise 3 ASCII letters.",
          "is_bot": false,
          "headline": "Guard SaveAsFile and WriteTo against a source changed since parse",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-03T10:57:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d86ca6b2f7cd9750b6b8171070d2f08331dcb61a",
          "body": "- MP4: reject a truncated or misaligning moov at parse instead of writing a\n  self-unreadable file; dedup a re-added chapter; re-parse structure under\n  --verify; count chapter-title truncation in the copy report.\n- ID3: preserve a non-numeric track/disc number and drop the unrepresentable\n  total w\n[…]\nAPTERxxx key instead of dropping it silently.\n- Trim media-type and ReplayGain values; fix the copy date-reduction reason,\n  a double-escaped filename in errors, year-0000 acceptance, and 0 B padding.",
          "is_bot": false,
          "headline": "Fix write/read fidelity and edge cases across codecs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-03T05:23:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "748af94ef8a348d9296e4e1f853473e3e3f0f63f",
          "body": "MP4 chapters now write the QuickTime text track at a fixed fine media\ntimescale so authored millisecond starts survive for third-party\nreaders, recover the last chapter's end, prefer the exact Nero chpl\nstarts over drifted or clamped QuickTime starts, and treat an identical\nre-copy as a no-op.\n\nAlso\n[…]\nue through the native\n  chunk.\n- Smaller fixes to LRC parsing, OS/2 BMP dimensions, ffmpeg's TXXX:TCMP\n  compilation frame, transfer value-drop grading, and a required\n  allocation bound in ReadSlice.",
          "is_bot": false,
          "headline": "Fix MP4 chapter fidelity and editor, CLI, and codec edge cases",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-02T14:36:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "964578a4a713a9dc53c0ba1a47ed1db48d67c8e9",
          "body": "Split \"4/9\"-style TRACKNUMBER/DISCNUMBER into number + total on the FLAC/Ogg, WAV, ID3, and Matroska read paths so every codec projects the same TrackNumber/TrackTotal pair, routing the read paths and the editor through one shared split (tag.NumberTotalSplit). On write, rewrite a slashed Vorbis comm\n[…]\nt-type cover reads as its true format. Carry an MP4 covr verbatim on a tag-only edit so it is not re-encoded under the wrong type code.\n\nAlso remove the now-unreachable transfer-time slash-total code.",
          "is_bot": false,
          "headline": "Normalize slashed track/disc numbers and sniff cover MIME from bytes",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-02T10:42:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fe4dc618cb94ce07cbb91b66e3a66b9b990b490e",
          "body": null,
          "is_bot": false,
          "headline": "Add MIT License to the project",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-02T04:06:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac27ee6d8afc855aa9061547d82685a4ca5ef1be",
          "body": "Correct cases where a write succeeded but the read model or writer could\nnot faithfully preserve the data, so the plan now matches what survives a\nre-parse.\n\n- MP4: reject a no-ilst meta box ending in trailing zeros instead of\n  swallowing later tags\n- Matroska: grade a non-image cover as dropped (i\n[…]\ng from the returned document, and\n  tighten trailing-ID3v1 detection\n- dump --json: omit bitrate when the duration rounds to zero\n\nAdd a round-trip invariant test harness and focused regression tests.",
          "is_bot": false,
          "headline": "Fix metadata round-trip fidelity across codecs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-02T04:03:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "83ec5501c7502c3041aaab6812e2425157d01a09",
          "body": "- MP4: route the count-driven table decoders through one shared bounds guard, and reject an undersized udta.meta at parse so a create-tag edit can't corrupt it\n- Editor: hand RemovePictures' match callback a Data-detached picture copy so a predicate can't mutate the immutable document or race a conc\n[…]\nTF-8 at the argument boundary as a usage error (exit 2) rather than a corrupt-file error (exit 4)\n- Document -o overwrite, cover-flag replace-vs-append, hidden files, and WAV/AIFF/ID3/FLAC/EBML limits",
          "is_bot": false,
          "headline": "Harden MP4 parsing and fix editor, library, and CLI edge cases",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-01T11:50:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "10dbe0406aad28eb85a406cc7b8a91f31b22f649",
          "body": "- WAV/AIFF --legacy strip: migrate native-only tags into ID3 instead of dropping them\n- Enforce the single file-icon rule only when an edit touches pictures\n- Matroska: force a rebuild so nested Cues/SeekHead CRC-32s aren't left stale in place\n- APE: bound the decoded item count and fix a 32-bit size-overflow slice panic\n- ID3: give SYLT the full uint32 timestamp range; lowercase synced-lyrics language\n- Document the multi-file exit-code precedence order",
          "is_bot": false,
          "headline": "Fix pre-v1.0 QA findings across WAV/AIFF, editor, Matroska, APE, and ID3",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-07-01T02:00:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef69c3c6893ba5bb7315d5cb1699f40a76e7d823",
          "body": null,
          "is_bot": false,
          "headline": "Fix pre-v1.0 QA findings across MP4, ID3, Matroska, and FLAC/Ogg",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-30T06:43:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ec8ae07f3d94fa5122ce4afc24f35ef05e7144b",
          "body": "- Transfer: grade unstorable MP4 track/disc/mediatype/compilation values as\n  dropped instead of clobbering the destination, and report a slash-embedded\n  track/disc total without overwriting the destination's own.\n- ID3: carry UTF-16 byte order across the segments of a frame (COMM/TXXX/USLT/\n  SYLT\n[…]\n: reject empty --synced-lyrics-file and image paths; advise on total-only\n  track/disc numbers.\n- Docs: drop a stale Matroska limitation; document the numeric-genre and MP4\n  cover-description quirks.",
          "is_bot": false,
          "headline": "Fix pre-v1.0 QA findings across transfer, ID3, Matroska, and FLAC/Ogg",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-30T02:20:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b68ee9716071922a64ca8daba0b77cb4207bb91",
          "body": "Read and write synchronized (timed) lyrics on MP3/AAC/AIFF/WAV via ID3\nSYLT frames and on FLAC/Ogg via an LRC SYNCEDLYRICS Vorbis comment.\n\nAdds the SyncedLyrics model with shared ParseLRC/FormatLRC, capability\nand transfer grading (SYLT lossless; LRC drops language/descriptor),\neditor SetSyncedLyri\n[…]\nces: --synced-lyrics-file, --add-synced-lyric,\n--synced-lyrics-lang, and --clear-synced-lyrics, plus dump/diff/caps and\nJSON output. MP4 and Matroska are out of scope (timed-text track, not\nmetadata).",
          "is_bot": false,
          "headline": "Add synced lyrics support to the tag-based codecs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-29T09:44:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "12c34ed0a5dcfb381a6b525a5f29aff80f04c2ea",
          "body": "MP3, AAC, AIFF, and WAV now read and write chapters via ID3v2 CHAP/CTOC frames; FLAC and Ogg via the VorbisComment CHAPTERxxx convention. Previously only MP4 and Matroska modeled chapters.",
          "is_bot": false,
          "headline": "Add chapter support to the tag-based codecs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-29T06:26:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3c635ce0d3e3a0c37048f85cc6ca8ca429b581b",
          "body": null,
          "is_bot": false,
          "headline": "Fix pre-v1.0 QA findings across CLI exit codes, ID3, MP4, and Matroska",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-29T02:28:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02997d606ca32be6f13599b8c4679eea0f7838df",
          "body": "- ID3: policy-aware genre paren-escaping, separator-agnostic v2.3 date\n  reduction, opaque-frame de-unsync\n- Copy: exclude own-audio keys (encoder, ReplayGain, fingerprint) and grade\n  date dispositions by value; keep a representable destination cover\n- Padding: --padding/--no-padding apply on their\n[…]\na inter-cluster\n  elements; extent versions bumped\n- Plan-reuse guard and returned-doc fingerprint; MP4 elst-trimmed duration;\n  RF64 rejection; oversized-chunk warning; dump --json cardinality parity",
          "is_bot": false,
          "headline": "Fix pre-v1.0 QA findings across codecs, transfer, padding, and detection",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-28T11:02:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "28397ede40644eefa68709b61fb52c43f3207644",
          "body": "Harden chained MP4 chapter writes (cached meta size, repaid chapter-time units, overflow warnings), grade and warn on lossy chapter/cover transfers, make format detection content-only, exclude SSND offset bytes from the AIFF essence digest, and clear an assortment of codec, tag, and CLI edge cases.",
          "is_bot": false,
          "headline": "Fix pre-v1.0 QA findings across MP4 chapters, transfer, and detection",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-28T03:26:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4aabef80b3be2c9d33ef414f9afb282e9cbf2469",
          "body": "- Matroska: preserve an overlong Info CRC size VINT on a title edit, keep a\n  scoped-only title when the file has no Info element, and rebuild the SeekHead\n  when a duplicate Tags/Attachments/Chapters master is absorbed\n- ID3: clamp frames+padding to the 28-bit size field and report it truthfully\n- \n[…]\nhared IFF/RIFF chunk walker\n- Tags/CLI: tighten ReplayGain and numeric-pair validation, validate\n  chapter-timestamp fractions, and preserve Vorbis/Opus key casing on edits\n- Update docs and add tests",
          "is_bot": false,
          "headline": "Fix pre-v1.0 QA findings across codecs, transfer, and CLI",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-27T21:36:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "96b7fd00107555a83302502fcf777c619b030fbe",
          "body": "- Collapse byte-identical MP4 chapter rewrites to a no-op, guarding\n  conflicted sources and explicit final-chapter ends\n- Strip phantom trailing empties in ID3 text frames and warn on\n  ID3v2.3 seconds loss\n- Resolve DISC/TRACK/ALBUM ARTIST aliases to canonical keys\n- Accept ErrUnalignedStream in the FuzzParse edit accept-list and seed it\n- Correct the Matroska write-layout comment",
          "is_bot": false,
          "headline": "Fix pre-v1.0 QA findings across chapters, ID3, and aliases",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-27T04:14:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cf3d8d8f15c53422be303f7acbcb859344c5467",
          "body": "Reject invalid UTF-8 on edit and sanitize parsed text so a write equals a\nfresh parse. Preserve Matroska album-tag structure and chapter language/flags.\nEnforce the ID3 frame cap on write and drop empty ID3v2 tags instead of\nfabricating them. Make dump/caps exit 4 on no-audio essence, give Ogg write\nrefusals distinct exit codes, and reject non-regular -o targets.",
          "is_bot": false,
          "headline": "Fix metadata edge cases across formats, tags, and CLI",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-26T23:28:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "407060ad2e70b86875940a288b9cd5a7b94cfbaa",
          "body": "- Bound parser memory: coalesce contiguous Matroska clusters and cap Ogg\n  page-descriptor accumulation so flood files no longer OOM the read-only\n  dump/verify path\n- Project Matroska tags faithfully per scope so duplicate and\n  case/whitespace-variant values survive round-trips, and preserve their\n[…]\n a readable\n  SOF before accepting a JPEG cover, reject a repeated \"-\" stdin, and make\n  --add-cover last-wins\n- Correct WAV/AIFF present-empty behavior docs and assorted comment/README\n  inaccuracies",
          "is_bot": false,
          "headline": "Fix pre-v1.0 QA findings across parsing, tags, and CLI",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-26T03:37:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d805a96926977ea8ad7d564ebce1b2743d35f0be",
          "body": "- ID3v2.3 date-precision and numeric-genre fidelity reporting; PERFORMER round-trip\n- MP4 QuickTime chapter rewrite, trailing-mdat reclaim safety, multi-track essence digest\n- Bounded metadata-element counts (DoS) across FLAC/WAV/AIFF/ID3/MP4/Matroska/Vorbis\n- CLI stdin labels and JSON output consistency",
          "is_bot": false,
          "headline": "Address pre-v1.0 QA findings",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-25T04:40:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "014d6df78228fbeabef6696b8ac4cd3f1304913a",
          "body": "A single shiftIndex type now drives both indexes through one\npatch-in-place-or-rebuild path, replacing the parallel makeSeek/makeCues\nhelpers and their hand-mirrored force flags.\n\nThe nested Cues rebuild tree is no longer captured at parse; buildCuePoints\nderives it from the raw bytes only when a width-crossing edit forces a\nrebuild, so ordinary parses keep just the flat cluster-offset list (~2.6x\nfewer allocations on large Cues).",
          "is_bot": false,
          "headline": "Unify SeekHead/Cues shift machinery and lazily build the Cues tree",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-24T08:20:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93bbc2f325b93af25198fb655ee9548995790f42",
          "body": "Embedding a cover (or any growth that shifts clusters past a VINT-width\nboundary) overflowed the fixed-width CueClusterPosition slots, which was\nrefused even though the SeekHead already had a re-encode path. Capture the\nnested Cues tree at parse and re-encode it at minimal width, converging the\nSeekHead and Cues together in the shift fixpoint.",
          "is_bot": false,
          "headline": "Rebuild Matroska Cues index on width-crossing edits",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-24T06:20:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c66139a84202813c40e300b7742b362e87e4253",
          "body": "- AAC: flag files with no decodable ADTS frame as no-audio so verify/set\n  refuse them instead of treating non-audio bytes as valid; propagate a\n  genuine header read error instead of mislabeling it as \"not audio\".\n- ID3v2.3: warn when a recording/original date with no numeric year cannot\n  be store\n[…]\njection-warning carry-forward in DowngradeNoOp.\n- Docs: correct the supported-format list, Pictures() deep-copy semantics,\n  and the ID3 default-version note; soften the set-time malformed-value note.",
          "is_bot": false,
          "headline": "Fix metadata edge cases and per-file CLI batch handling",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-24T04:27:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eaf8f221f611129942cd79577fbc75d963a06532",
          "body": "- Fix Vorbis DESCRIPTION folding into COMMENT (silent data loss on FLAC/Ogg/Opus)\n- Warn on reduced-fidelity value writes and dropped Matroska chapter end times\n- Trim surrounding whitespace from numeric values on write\n- Make all Plan methods total on a nil/zero receiver instead of panicking\n- Add \n[…]\nic lint finding and a top-level JSON subformat field\n- Reword the empty-value note; clarify set/plan warnings in help and README\n- Centralize the numeric-trim, capability-reason, and subformat helpers",
          "is_bot": false,
          "headline": "Address pre-v1.0 QA findings",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-24T00:25:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4b9d91ed7a53c3df74185a30caf0bc6a7c568c4b",
          "body": "Correctness and reporting fixes across the codecs and CLI:\n\n- ID3: stop corrupting TRCK/TPOS totals, de-unsync v2.4 frames before\n  stripping grouping/data-length bytes, and preserve COMM/USLT languages on edit\n- Matroska: recompute CRCs on overlong-size CRC elements; report non-front\n  cover roles \n[…]\n ID3)\n- CLI: --add-cover replaces an existing front cover; dump distinguishes\n  duplicate values from conflicting ones\n- Docs: caps/help note image-header sniffing and open-ended Matroska chapter ends",
          "is_bot": false,
          "headline": "Fix metadata-fidelity issues from pre-v1.0 QA",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-23T21:31:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "03bfd1d266b1d4c83e18120cc18f062f6c9a6760",
          "body": "Use bytes.Contains in deunsync, drop no-op OR term in FLAC test, and\nremove unused base parameter from rebuildComments.",
          "is_bot": false,
          "headline": "Fix staticcheck/gopls lint warnings",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-23T07:29:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b2366439ead18a829e4345650ec80632fdce02c",
          "body": null,
          "is_bot": false,
          "headline": "update docs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-23T07:24:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3ce14f5a57c34e38e8ec5e4cb4f10d1b012a93e9",
          "body": "Guard no-audio files against editing, hashing, and verifying; warn (and fail under --strict) on MP4 values the format cannot represent; single-source value validation so lint and set agree; and remove the unimplemented legacy reconcile/update-existing policies and the preset built on them.\n\nAlso cor\n[…]\nnt reporting, no-op warning visibility, the list-command error JSON shape, and assorted render/help/doc inconsistencies. The README capability table is now generated from the codecs and golden-diffed.",
          "is_bot": false,
          "headline": "Address QA findings ahead of v1.0",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-23T07:04:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "16e503d6e062f7ea090bcdb97efec0d1585609e0",
          "body": "… CLI/JSON\n\n- Matroska/WebM: keep a present-empty value so `set KEY=` stays distinct from\n  `--clear KEY`; a binary- or nested-only managed tag stays native-only\n- Normalize a slash `TRACKNUMBER=3/12` (and `DISCNUMBER`) into the canonical\n  number/total pair on every format, not just ID3/MP4/Matrosk\n[…]\nhare tag.SplitNumberTotal/TotalKey across codecs and the editor; add\n  nonNil, TagPatch.Writes, and refuseUnquotedValue helpers\n- Docs: fix the sanitization wording and document plan/set stdin support",
          "is_bot": false,
          "headline": "Preserve empty tag values and normalize n/total across formats; align…",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-22T22:59:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cf0f55844c985ec7d609bf8ab312c28f5ad63a4d",
          "body": "- Matroska: keep a cross-scope tag (incl. slash numbers like 3/12) when an\n  unrelated tag is edited, instead of dropping one of its values\n- Codecs: collapse a re-projected edit (e.g. GENRE=17 -> Rock) to a true\n  no-op so IsNoOp() and Changes() agree and saves stop churning the file\n- CLI: follow \n[…]\nhe path; carry the error hint into --json; emit \"changes\": [] for no-ops;\n  lint exits 4 for error-severity findings and 1 for warnings\n- Docs: correct the sanitization wording and the exit-code table",
          "is_bot": false,
          "headline": "Fix cross-scope tag loss and no-op churn; tighten CLI contracts and docs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-22T09:35:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c193e7698fa4f5f33cb588ef3d05212657863e75",
          "body": "- Reuse parse-warning codes and messages in lint findings; point dump at lint\n- Warn when an edit leaves a preserved ID3v1/APEv2 tag disagreeing with the new value\n- Drop Go's open verb from cover-load errors while keeping the I/O exit code\n- Note files a recursive walk skips by extension\n- Polish family-view wording, chapter capability strings, and unknown picture dimensions\n- Fix padding and empty-value flag help and the dump/lint README sections",
          "is_bot": false,
          "headline": "Align lint/dump diagnostics and polish CLI messages, help, and docs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-22T05:52:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df81513b7dadd4cbc0b67c5ca35a6fc4e8d19130",
          "body": "- Fix empty -o silently overwriting the input and a WriteTo(nil) panic\n- Reject NUL tag values and re-running a committed save-back; scope picture-MIME sniffing to the embed path\n- Fall back to default parse limits for zero fields; clearer errors for empty or uninitialized inputs\n- CLI: reject no-op and empty-value invocations, validate the -o parent dir up front, unify the not-found message, add verify and quoting hints",
          "is_bot": false,
          "headline": "Harden edit/save guards and polish CLI and library diagnostics",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-22T03:42:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96a6b4c4d856a287d3e9206240eeb20c518d5b96",
          "body": "- set/plan: --add-picture ROLE=PATH, --remove-picture, --picture-description\n- add a version subcommand and a per-format padding level in caps\n- lint flags malformed numbers; AIFF reports a truncated file's decodable duration\n- \"did you mean?\" suggestions for typo'd keys; boolean/negative value note\n[…]\nth hint, accept\n  --padding 0 with --no-padding, and warn when MP4 drops cover role/description\n- tag.ParseKey trims whitespace; new ClosestKey/IsBooleanKey/ValidBooleanValue\n- update README and tests",
          "is_bot": false,
          "headline": "Add CLI picture editing and polish metadata diagnostics",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-21T22:32:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2d63c823f92315d9496549f799be63410b187541",
          "body": "- API: no panics on a zero-value Document or nil sources; ErrNeedsFile for a\n  path-less SaveBack; Pictures() returns deep copies; a present-but-empty edit\n  reports as a true no-op; single-valued-multi is surfaced as a plan warning.\n- Codecs: accurate AAC (ADTS) duration/bitrate from a frame-header\n[…]\nted, `caps --format webm` is accepted, lint de-dups\n  conflicting-families, and a/an + vendor-string wording are fixed.\n- Replace the home-grown waxerr.AsType with stdlib errors.AsType; update README.",
          "is_bot": false,
          "headline": "Harden the public API and fix codec, CLI, and doc rough edges",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-21T07:38:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "61e8505e34034d3ecc0cbd56705bcacb76b290b2",
          "body": "- Stat before opening so FIFOs, devices, and directories are rejected\n  cleanly instead of hanging; the CLI returns a usage error (exit 2) for\n  these across dump/verify/plan/set/lint and caps/diff/copy.\n- Multi-file runs report the most-severe error class, not the first.\n- Bare `waxlabel` exits 2 i\n[…]\n0.\n- All per-file JSON errors share one {schemaVersion,file,error} entry;\n  `diff --quiet --json` now emits the object.\n- Recursive walks still follow symlinks and surface broken links as\n  not-found.",
          "is_bot": false,
          "headline": "Fix non-regular input hang; tighten exit-code and JSON contracts",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-21T04:47:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "18aa9746764803a51b86e4c354380aa64c4ee24e",
          "body": "CLI: preserve real newlines in command suggestions, add usage hints on\nargument/flag errors, exit non-zero on unknown help topics, guard -o\n(refuse existing/dangling/directory targets, --overwrite to allow),\nunify the per-file not-found message, flag single-valued conflict rows\nin dump, and add work\n[…]\nst the file end or sharing a start, and clarify the invalid-key\nerror.\n\nAlso share a chapter-time formatter and per-file error/note helpers,\nfold the context-cancellation check, and update the README.",
          "is_bot": false,
          "headline": "Polish CLI behavior and harden library edit guards",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-21T00:49:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ba5be63b3db42890f69eb425548f468a2ecd93eb",
          "body": "Relocates the 33 root test files into tests/, leaving the root with only the library source. Tests read shared fixtures from ../testdata; the fuzz seed corpus is inlined as f.Add seeds so a single root testdata/ remains.",
          "is_bot": false,
          "headline": "Move the test suite into a dedicated tests/ package",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-20T08:56:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb6939487af30567af3c807514d34f2bbf978939",
          "body": "- MP4: preserve a non-zero first chapter start via a QuickTime edit list,\n  so chapters round-trip without a false source-conflict and stay idempotent\n- dump --json: drop the misleading bit depth for lossy codecs\n- MP3: warn when a .mp3 contains no audio frames\n- set: --padding 0 writes no padding, \n[…]\ne for single audio-only files\n- copy: clearer drop reasons and a WebM vs Matroska header label\n- tense-neutral wording for write-plan operations; remove a duplicate\n  padding clamp; refresh the README",
          "is_bot": false,
          "headline": "Fix MP4 chapter offsets and polish metadata reporting",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-20T08:05:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e4f18c5edf0befc077767411e7106b594641923",
          "body": "- new keys command lists the canonical tag vocabulary\n- set/plan: --add-chapter and --clear-chapters\n- set --quiet suppresses per-file output; verify --quiet emits TSV for dedup\n- --padding N now reserves at least N bytes (a floor), including on the\n  in-place reuse paths for FLAC, MP3/AAC, and MP4\n\n[…]\nr-only files no longer print a meaningless bitrate\n- chapter timestamps reject out-of-range and nonstandard numeric forms\n- drop the dead caps --all flag; reword edit notes; fix README WriteTo example",
          "is_bot": false,
          "headline": "Add chapter editing and keys command; fix padding floor and edge cases",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-20T03:42:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2a9d281c6b882350513d7887cc6249922b4f3e27",
          "body": "Wrap stdout/stderr once in dispatch so terminal-control bytes from untrusted files can't reach the terminal, regardless of which renderer produced them; the --json paths unwrap to raw so the machine contract is unchanged. Make Warning/Finding String() self-sanitizing, and add SanitizeLine for single-line fields (tag keys, paths, codec, change/diff/copy/lint rows, error lines) so a file-derived newline can't forge a line.",
          "is_bot": false,
          "headline": "Add a sanitizing boundary for all human CLI output",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-20T00:46:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "276f5b08850c308487aac58dd77ebb76251467cc",
          "body": "- Escape control/ANSI bytes in text output (dump, plan/diff previews, lint\n  findings); --json and structured accessors still carry exact bytes\n- Add Plan.String() and WriteReport.String() for readable library output\n- Treat a directory without --recursive as a usage error, and exit non-zero\n  when \n[…]\nric/date and present-but-empty values (still written)\n- Humanize byte sizes in size-limit errors; expose waxlabel.HumanBytes\n- Clarify the tag-count header and drop the audio line for degenerate files",
          "is_bot": false,
          "headline": "Sanitize human-readable output and smooth CLI rough edges",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-19T22:34:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db698fda4b5aa8d5191436b2ed96571f1b49128b",
          "body": "…splay polish\n\n- Detect truncated audio: WAV/AIFF/MP4 (declared essence overruns the file) and\n  VBR MP3 (Xing frame count vs bytes present), surfaced as a truncated-audio lint\n  finding. FLAC and Xing-less CBR MP3 are left unflagged as undetectable.\n- Canonicalize codec names across containers (mp4\n[…]\ne; omit sub-1-kbps bitrates; render\n  \"<stdin>\" headers and \"(empty value)\"; show printable invalid-key bytes as chars.\n- Collapse duplicate inherited-encoder warnings; pin schemaVersion at 1 pre-1.0.",
          "is_bot": false,
          "headline": "Add cross-format truncation detection, codec canonicalization, and di…",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-19T19:00:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "274514329ee421c5f980ded388e3733ef33ea6ee",
          "body": "…ails\n\n- Matroska clear/set/strip now remove a key from track/edition/chapter\n  scopes, not just album; CRC recomputed on re-rendered groups\n- Add --recursive to dump/verify/lint\n- Add --strict plus stderr notes for unknown keys and single-valued keys\n  given multiple values (set/plan)\n- Add single-valued-multi and custom-key lint rules\n- lint --fix now reports structural operations (e.g. stripped ID3v1)",
          "is_bot": false,
          "headline": "Make Matroska tag edits reach every scope; add --recursive and guardr…",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-19T06:46:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a686f7046998a3dd9327a22aaf972a03fbd6b83",
          "body": "Bump schemaVersion to 3: dump, verify, lint, set, plan (and caps over files) now emit a JSON array even for a single path, so output can be consumed uniformly; diff and copy stay single objects. Ogg now reports \"Opus\"/\"Vorbis\" to match Matroska's codec strings.",
          "is_bot": false,
          "headline": "Always emit list-command JSON as an array; titlecase Ogg codecs",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-19T04:48:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75183abb49b89d4cc6a5129818296ed92c4c10db",
          "body": null,
          "is_bot": false,
          "headline": "Add metadata discovery API and caps command",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-19T02:34:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aebbbe5be471ff9b91065631829a99efe1f0ca06",
          "body": "- set/plan take multiple files and --recursive; dump/verify/lint/diff read \"-\" from stdin\n- reject non-image cover art by default (--force to override) and sniff WebP/BMP/TIFF\n- update through symlinks to the target instead of replacing the link\n- warn when an output file's extension does not match its format\n- rename Tags.Composer/Genre to Composers/Genres and report MP4 bitrate\n- share one average-bitrate helper across codecs",
          "is_bot": false,
          "headline": "Add bulk/recursive editing, stdin support, and cover validation",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-18T23:24:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03865db966cc6a237f1334e62ee5500c6b059b86",
          "body": "- plan/set/copy now preview which fields change (e.g. TITLE: old -> new) via a shared tag.Diff\n- new lint command reports metadata issues; lint --fix applies safe remediations; set gains --strip-encoder\n- tag-only or truncated files warn (no-audio) and fail verify instead of producing an empty digest\n- JSON schemaVersion is now 2: per-file objects carry it and write plans include a changes list",
          "is_bot": false,
          "headline": "Add lint command, field-level change preview, and no-audio detection",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-18T21:34:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3213376da6a82e7287776c33002f76479352ef70",
          "body": null,
          "is_bot": false,
          "headline": "Add canonical ENCODER key distinct from ENCODEDBY",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-18T20:00:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdc56503917314bebfe70084c9431b437b050367",
          "body": "- Drop redundant \"waxlabel:\" prefix from library sentinels\n- Report missing files as \"no such file: <path>\" (not-found)\n- Name the destination dir, not the temp pattern, on write failure\n- Use \"not modeled\" for Ogg chapters so transfer reports stop doubling\n- Reject directory input with a clear message\n- Add \"cover image:\" context to cover read failures",
          "is_bot": false,
          "headline": "Polish CLI error messages",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-18T18:52:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5eca3c246560b82347911689d40ddcd8bccc39c0",
          "body": "Thread the parsed file into Codec.Capabilities(m, opts) so support can depend on file state, not just format and options. Matroska reports cover write as unsupported for WebM (Attachments is outside the WebM subset), so a transfer drops the cover instead of reporting it carried and then failing at Prepare, restoring report == result. PlanTransfer (no file) still answers format-level.\n\nAlso remove the unused hashRanges limit param, ignore the cmd build artifact, and apply minor lint cleanups.",
          "is_bot": false,
          "headline": "Add file-aware codec capabilities",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-18T07:08:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4dd0c8eeafd5bf1d2557661eb2e522d2406db877",
          "body": "Also strip decorative comment separators and non-ASCII characters across the codebase.",
          "is_bot": false,
          "headline": "Add Matroska chapter read/write",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-18T04:12:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6fa4f37445fee7f6a5836e38833d4435a88e1f7",
          "body": null,
          "is_bot": false,
          "headline": "Add .gitignore",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-18T02:04:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d9ec44feeca4da4ee5455286a1731891662ee58",
          "body": null,
          "is_bot": false,
          "headline": "Add Matroska tag/title/attachment write",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-18T02:03:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3dd522b12fa245c12f32b3ac8c403fee7b2b9b6f",
          "body": "A chapter edit now rebuilds the QuickTime chapter track alongside the\nNero chpl, so edits are visible in iTunes/Apple Books (which ignore\nchpl). The track is built fresh with its samples in an mdat appended at\nend-of-file (audio never moves) and a tref \"chap\" from the audio track;\nthe moov rewrite s\n[…]\n chained edit\n  rebuilds, not corrupts, the track\n- guard a max (0xFFFFFFFF) track id and the mvhd unknown-duration sentinel;\n  preserve non-chap tref references; use sizePatch for the trak size field",
          "is_bot": false,
          "headline": "Add MP4 QuickTime chapter text-track write (step 12)",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-17T22:33:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f2bc3b4cd13f900092ee56c0c22fc6946a4351b",
          "body": "- PlanTransfer/PrepareTransfer: project canonical tags/pictures/chapters\n  onto a destination format, reporting each as carried/lossy/dropped via\n  one shared core.ProjectTransfer (report can't disagree with the write)\n- CLI copy: cross-format in-place metadata copy with the loss report,\n  --preset/\n[…]\ntead of failing at write time\n- MP4: reject covers that aren't JPEG/PNG/BMP instead of silently\n  mislabeling them as JPEG (pre-existing corruption)\n- expose EqualPictures/EqualChapters; reuse in diff",
          "is_bot": false,
          "headline": "Add cross-format metadata transfer: PlanTransfer + CLI copy/diff",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-17T20:09:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5d2907fde77d7c28edfd58be0246c89a7dd0f3c8",
          "body": null,
          "is_bot": false,
          "headline": "Fix Windows build: isolate syscall.Stat_t in a unix-tagged file",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-17T07:31:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "acdcab44f269b1ca7c39944586f8d5c489c8c9ab",
          "body": "- internal/aac: tags in a front ID3v2 over the ADTS stream (reuses\n  internal/id3); strict ADTS detection; first-frame duration estimate;\n  FormatAAC now Implemented + Writable\n- Factor shared write helpers out of per-codec duplication: core.NoOpPlan,\n  PaddingPolicy.ClampTarget/ReuseOrTarget, id3.R\n[…]\n/RenderedSize,\n  and core.DetectLeading for front-ID3 disambiguation\n- Fix MP4 created-tag write into a udta with a trailing zero tail (e.g. a\n  QuickTime terminator) that misaligned the appended atom",
          "is_bot": false,
          "headline": "Add AAC (raw ADTS) read/write",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-17T07:24:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "31175bde3f7421ea5f70659a455fb0a624e6e80c",
          "body": "- core.Chapter{Start,End,Title}; Document.Chapters / Editor.SetChapters\n- MP4: Nero chpl read (v0/v1) + write, QuickTime chapter-track read,\n  deduped into one list with source-conflict / chapters-stale warnings\n- audiobook tags: MediaType (stik), Description/LongDescription, Narrator\n- CLI dump prints chapters (text + --json)\n- real ffmpeg M4B fixture + ffprobe/decode differential tests",
          "is_bot": false,
          "headline": "Add chapter model + MP4 chapter read/write and audiobook tags",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-17T05:25:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d23dbc2473a90c07deee00e621d2c60f1b4d52c",
          "body": null,
          "is_bot": false,
          "headline": "Refactor tests to use requireTool for ffmpeg/ffprobe checks",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-17T03:22:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d875ee442102428a61026d22788f2e7b070f51d",
          "body": null,
          "is_bot": false,
          "headline": "Add AIFF/AIFF-C read/write",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-16T23:08:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94852374f52f836cec81324c5e9ac95e44950cf0",
          "body": "Read-only EBML codec: scope-aware tag projection (album/track/edition/\nchapter), Info.Title, cover-art attachments, and audio properties; full\nscoped tree preserved in Native.\n\nAlso reject malformed nested MP4 atom tiling (overrun / ragged tail) that\nbroke the writer round-trip on fuzz input, while tolerating the QuickTime\nudta zero terminator.",
          "is_bot": false,
          "headline": "Add Matroska/WebM read",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-16T21:58:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9ba34175aa7001bb81397ef3df3baa98b030846",
          "body": "iTunes moov.udta.meta.ilst tags (text, trkn/disk, covr art, ---- freeform\nlong tail) with free-atom reuse and all-track stco/co64 offset fixups, so\nthe media usually doesn't move. Non-fragmented only; chpl preserved;\nfragmented (moof) rejected. Shares core family/tagset builders with id3.\nValidated via ffmpeg/ffprobe differential, fuzz, and -race.",
          "is_bot": false,
          "headline": "Add MP4/M4A read/write",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-16T20:00:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e75f2df8585614aa0575bc149570bd97afe56c3",
          "body": "LIST/INFO + embedded id3 chunk (reuses internal/id3): id3 wins on conflict, INFO fills gaps, and unmappable keys/pictures force an id3 chunk so nothing is lost; all other chunks preserved; RF64/BW64 rejected.\n\nAlso broaden the change-detection fingerprint to cover trailing metadata (FLAC/MP3/Ogg/WAV) and share the encoder-noise/conflict/membership helpers via core + id3.EncoderNoise.",
          "is_bot": false,
          "headline": "Add WAV/RIFF read/write",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-16T07:45:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f350d7c8fa5f6a3e2d80f031425a015a511f8f50",
          "body": null,
          "is_bot": false,
          "headline": "Add MP3/ID3 read/write",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-16T05:29:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54f1108b6dce1075aeed4a8d55d352ea2de5c1b3",
          "body": "Share the Vorbis comment + picture codec via internal/vorbis (FLAC delegates to it), and add internal/ogg: a packet-payload-preserving rewrite with header re-pagination and CRC-patch audio-page renumbering, chained/multiplexed read-only handling, and METADATA_BLOCK_PICTURE + Opus R128/padding support. Adds multi-segment audio essence (Media.AudioRanges).",
          "is_bot": false,
          "headline": "Add Ogg Vorbis and Opus read/write",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-16T00:52:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bfa606c6da56050f8b09054a3f476e672524dfe",
          "body": "cobra-based tool under cmd/waxlabel that dogfoods the library, with --json output and stable exit codes. Adds cobra to the module; the library packages stay dependency-free.",
          "is_bot": false,
          "headline": "Add waxlabel CLI: dump, plan, set, verify",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-15T22:52:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b32b0e6dceb3ae6fc85a448a49a9578418798f3",
          "body": "Pure-Go audio metadata library: immutable Document, presence-aware TagSet/TagPatch, canonical key vocabulary, Prepare/Execute write flow, versioned audio digest, Lint, and end-to-end FLAC tag/picture support.",
          "is_bot": false,
          "headline": "Add WaxLabel core model and FLAC read/write",
          "author_name": "Cole Springer",
          "author_login": "ColeSpringer",
          "committed_at": "2026-06-15T20:52:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 3,
      "commits_last_year": 90,
      "latest_release_at": "2026-07-17T19:55:28Z",
      "latest_release_tag": "v1.2.0",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 6,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/colespringer/waxlabel",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/colespringer/waxlabel",
          "is_deprecated": false,
          "latest_version": "v1.2.0",
          "repository_url": "https://github.com/colespringer/waxlabel",
          "versions_count": 3,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-17T19:47:56Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "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
      },
      "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": 80795,
      "source_files_sampled": 364,
      "oversized_source_files": 4,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "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/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"
        }
      ],
      "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": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "ColeSpringer",
          "commits": 90,
          "avatar_url": "https://avatars.githubusercontent.com/u/93888664?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": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 10,
            "reason": "project is 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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "73092460169e9a0484229ab13a0253651b818e5e",
        "ran_at": "2026-07-22T11:21:27Z",
        "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-17T19:54:41Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ColeSpringer/WaxLabel",
    "host": "github.com",
    "name": "WaxLabel",
    "owner": "ColeSpringer"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 46,
      "inputs": {
        "security": 33,
        "vitality": 71,
        "community": 24,
        "governance": 30,
        "engineering": 66
      },
      "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": 90,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "90 commits in the last year",
                "points": 17.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 90
                    }
                  }
                ],
                "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": 3,
              "latest_release_tag": "v1.2.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "3 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "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": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 30,
        "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": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "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": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 32,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "ColeSpringer",
              "public_repos": 6,
              "account_age_days": 1717
            },
            "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": "0 followers of ColeSpringer",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "ColeSpringer"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "6 public repos, account ~4 yr old",
                "points": 15.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 6
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 4
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/colespringer/waxlabel"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "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 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "3 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 66,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "aac",
                "aiff",
                "audio",
                "cli",
                "flac",
                "go",
                "golang",
                "id3",
                "m4a",
                "m4b",
                "matroska",
                "metadata",
                "mp3",
                "mp4",
                "ogg",
                "tags",
                "wav",
                "webm"
              ],
              "has_wiki": true,
              "homepage": "https://github.com/ColeSpringer/WaxLabel",
              "has_readme": true,
              "has_docs_dir": false,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://github.com/ColeSpringer/WaxLabel",
                "points": 15,
                "status": "met",
                "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": "18 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 33,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 33,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 58,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.822,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "74 of 90 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 74,
                      "sampled": 90
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "no agent-authored commits among the last 90",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 90
                    }
                  }
                ],
                "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": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 80795,
              "source_files_sampled": 364,
              "oversized_source_files": 4
            },
            "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": "4/364 source files over 60KB",
                "points": 54.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 364,
                      "oversized": 4
                    }
                  }
                ],
                "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-22T11:21:32.173770Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/ColeSpringer/WaxLabel.svg",
  "full_name": "ColeSpringer/WaxLabel",
  "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.26.0 — full methodology · metrics wiki.

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