JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 786,
"has_wiki": false,
"homepage": "https://fishka.bio",
"languages": {
"JavaScript": 1580,
"TypeScript": 331096
},
"pushed_at": "2026-07-22T02:33:56Z",
"created_at": "2026-07-03T20:43:54Z",
"owner_type": "User",
"updated_at": "2026-07-22T02:34:03Z",
"description": "Sequencing file parsers and writers for bioinformatics data",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "master",
"license_spdx_raw": "Apache-2.0",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript"
]
},
"owner": {
"blog": "https://fishka.bio",
"name": "fishka.bio",
"type": "User",
"login": "fishkabio",
"company": null,
"location": "Web-based bioinformatics",
"followers": 0,
"avatar_url": "https://avatars.githubusercontent.com/u/298752031?v=4",
"created_at": "2026-07-01T14:31:49Z",
"is_verified": null,
"public_repos": 7,
"account_age_days": 29
},
"license": {
"state": "standard",
"spdx_id": "Apache-2.0",
"raw_spdx": "Apache-2.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [],
"recent_commits": [
{
"oid": "051d5621fbcf991f5185852e29a140e78b1ad11e",
"body": "….10.0\n\nresolveGenbankLocation() turns a parsed location AST into 0-based half-open\nsegments in reading order, handling complement (which reverses order and flips\nstrand), join/order, between-boundaries, fuzzy positions, origin-spanning ranges\non circular molecules, and out-of-bounds clamping; unknown operators and remote\nreferences resolve to nothing rather than to untrustworthy geometry.\n\nThe bump also carries the ABIF UTF-8 string decoding from the previous commit.",
"is_bot": false,
"headline": "genbank: resolve location expressions to concrete coordinates; bump 0…",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-21T23:35:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbbf8382e319cd37e434d675dd5d426b44c0f549",
"body": "ABIF fixes no encoding for char/pString/cString, and instruments write their\nlocale: the Nanofor-05 stores cyrillic run metadata as UTF-8, which the previous\nbyte-per-character reading turned into mojibake. decodeAbifText() tries strict\nUTF-8 first and falls back to the old Latin-1 reading, so existing files are\nunaffected; encodeAbifText() is its counterpart for writers. Trailing NULs are\nnow trimmed off the payload before decoding rather than off the decoded string.",
"is_bot": false,
"headline": "abif: read string tags as UTF-8 when the bytes are valid UTF-8",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-21T22:10:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "283bf1d51404afbd4d4b791b011001d70250a4d9",
"body": "…ns, references); bump 0.8.4\n\nAdd parseGenbankDocument with a full flat-file model (LOCUS, DEFINITION,\nACCESSION/VERSION, DBLINK, SOURCE/ORGANISM, REFERENCE, FEATURES with an\nINSDC location parser, ORIGIN, BASE COUNT) plus recoverable diagnostics.\n\nFix two bugs found while reviewing the implementati\n[…]\nT,\n PRIMARY, ...); reference subfields are distinguished by indentation.\n- missing-record-terminator diagnostics anchor to the unterminated record\n so per-record filtering attributes them correctly.",
"is_bot": false,
"headline": "genbank: parse GenBank/GenPept documents (metadata, features, locatio…",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-11T03:29:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a53745ad0a9e303fa3f28872b1edb9aad49d5845",
"body": "…0.8.3\n\n- hasPdbSignal: window scan for a definitive PDB record (ATOM/HETATM with an x/y/z coordinate\n triplet, SEQRES with optional blank chain, or CRYST1 unit-cell), firing only when the first line\n is unclassifiable — catches bare-MODEL and I-TASSER 'HEADER protein' coordinate files\n- hasGffFas\n[…]\nected as gff\n- signatures use [ \\t] (not \\s) inter-field so they stay within one line; codex-reviewed\n- sweep of ~10500 UGENE fixtures: pdb 37->41 detected/39 parsed, gff 51->53/16, no false positives",
"is_bot": false,
"headline": "detect: recognize coordinate/SEQRES-led PDB and headerless GFF; bump …",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-10T19:00:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8c173e1cfc9bac8906591bcb7736ac828f6da6e1",
"body": "- MEGA (.meg): #mega header, !directives, #Name residue rows (interleaved), \"...\" comments stripped\n- PDB (.pdb): SEQRES chains, with an ATOM/HETATM first-model fallback for coordinate-only files\n (HETATM gated to a polymer/modified-residue whitelist: MSE etc., excluding ligands/ions/solvent)\n- ACE\n[…]\n Staden chromatograms (v2 AoS / v3 SoA layouts)\n- detect: coordinate-led PDB, #mega, AS-header ACE signatures\n- validated against UGENE _common_data fixtures (20/20 scf, 35/39 pdb detected, 28/31 ace)",
"is_bot": false,
"headline": "Add MEGA, PDB, ACE and SCF sequence readers; bump 0.8.2",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-10T18:36:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "70a876e40d298f4d7163792e9921713726ab667c",
"body": "…tion\n\nparseMsf: drop the numeric position-ruler / coordinate lines GCG & GeneDoc\ninterleave between blocks (they carried digits, so were turning into bogus\n\"1\"/\"50\" records). A row is kept iff its residue field is digit-free — lenient\n(genuine rows survive even if Name: labels were truncated) and n\n[…]\nMUSCLE/… banner. Verified on UGENE's 17-file _common_data MSF corpus (lipid8,\nPileUp, GeneDoc-preamble, header-mangled all parse clean; garbage/negative file\nstays unknown). +7 unit tests (203 total).",
"is_bot": false,
"headline": "msf: read GeneDoc/PileUp variants; skip position rulers; robust detec…",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-10T17:50:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "89d7b4a1515483624965d108e0e5be0405c5f11a",
"body": null,
"is_bot": false,
"headline": "Bump @fishka/seqio to 0.8.0 (sam/bam/gfa readers)",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-10T07:04:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f4a8172c734730aaa9b9865fdffbac4373a3002",
"body": "parseBam reads inflated BAM bytes (caller peels BGZF/gzip; DecompressionStream decodes\nBGZF's concatenated members). Parses the header ref table (fully bounds-checked against\nmalformed/huge headers) then alignment records: decodes the 4-bit-packed SEQ, maps\nrefID→RNAME, and applies the same rules as\n[…]\nnient: bounded loops + try/catch return partial results, never throw/hang.\nSAM reader refactored onto the shared common.ts. Reviewed with codex (offsets, 4-bit\ndecode, and the header-parse DoS guard).",
"is_bot": false,
"headline": "bam: binary BAM reader (parseBam), sharing SAM record semantics",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-10T07:04:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3ecea3f65cf8bef71db59aa032004c16517dc758",
"body": "parseSam: read sequence (SAM field 10) per alignment; skip '@' headers, SEQ='*', and\nsecondary(0x100)/supplementary(0x800) alignments so it yields one sequence per read;\nid = QNAME (+ /1,/2 for paired mates); description = 'RNAME:POS (+/-)' or 'unmapped';\nreverse-strand SEQ stored verbatim (referenc\n[…]\nGFA2 (S sid len seq); skip '*'.\ndetectFormat: +sam/+bam/+gfa — BAM 'BAM\\1' magic (post-inflate), SAM header/headerless\n(11-field CIGAR heuristic), GFA H-version/headerless S-line. Reviewed with codex.",
"is_bot": false,
"headline": "sam, gfa: sequence readers + content detection",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-10T06:57:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0e1a2919817772d296a2af6d4db33490a658f242",
"body": null,
"is_bot": false,
"headline": "Bump version to 0.7",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-10T04:19:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "080af84b2da18dd2723f3643b3957bcc83cf2782",
"body": "Add read-only sequence extractors, all lenient (never throw) and multi-record,\nreturning a uniform SeqRecord {id, description?, sequence}:\n\n- FASTA/FASTQ parsers (parseFasta/parseFastq); fastx split into src/fastx/ with\n the codec in fastx-format.ts and record types in types.ts\n- GenBank/GenPept (p\n[…]\nextension\n\nShared helpers in src/text.ts and the SeqRecord model in src/seq-record.ts.\n181 Jest tests with real-world fixtures. AGENTS.md: leniency, multi-record, and\ndetection conventions documented.",
"is_bot": false,
"headline": "feat: sequence readers for text formats + content-based format detection",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-10T03:54:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "32b8c3b02eb322fcbb20ea64eb552e4392612736",
"body": "upsertEntry appended new tags with entries.push(), leaving the directory\nunsorted after a basecaller adds PBAS2/PCON2/PLOC2/DATA9..12. The ABIF\nspec prescribes a directory sorted by (tagName, tagNumber), and readers\nthat binary-search it — notably Chromas — silently miss a tag placed out\nof order: a\n[…]\n;\nensureRawDataChannels() uses it directly to copy DATA1..4 -> DATA9..12\nwith their payload/shape intact (upsertEntry's count*size check would\nreject a tolerated desynced source). Bump 0.6.0 -> 0.6.1.",
"is_bot": false,
"headline": "fix(abif): insert new directory entries sorted by (tagName, tagNumber)",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-09T18:26:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fcec26c7bf94308b2fe4bba646e20789bc1d200a",
"body": null,
"is_bot": false,
"headline": "Release v0.6.0",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-07T03:53:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4813d3d98812744db33f81a01303dd65c40ac6dc",
"body": "start/end is a half-open sample range in the processed (DATA9..12)\ndomain -- the only domain PLOC maps into. DATA9..12 are sliced\nexactly by that range (rejecting a range past the shortest channel's\nlength, rather than silently clamping it into an inconsistent state).\nDATA1..4/5..8 have no honest co\n[…]\nequenceForVersion/getConfidencesForVersion/getPositionsForVersion\nto the view layer (the existing preferred-version getters now delegate\nto them) so per-version basecall data has a single decode path.",
"is_bot": false,
"headline": "Add cropAbif: crop an ABIF file to a DATA9..12 sample range",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-07T03:53:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "35632dc68aab2dc99d7a46bc0a528c768ec8e5be",
"body": null,
"is_bot": false,
"headline": "Release v0.5.0",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-07T03:29:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d94331c18aad3d28765a0cbbf61fd8003eb342bc",
"body": "Rename raw.ts to abif-format.ts and document the raw/domain layered\ndesign as a convention for future formats (AGENTS.md).\n\nwriteAbif now reproduces the original file byte-for-byte when nothing\nwas changed, and keeps every untouched entry at its exact original\noffset when something else is mutated -\n[…]\no longer\ncombine new fields with a stale on-disk shape, and the anchor now\naccounts for the directory's physical size even when a file's declared\ntdir.dataSize is desynced from its actual entry count.",
"is_bot": false,
"headline": "Make writeAbif byte-exact on an unmodified round-trip",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-07T03:29:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "91d108a947f487e662991b6052e62dc61887187e",
"body": null,
"is_bot": false,
"headline": "Refresh README API overview",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-03T22:49:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "66ec7ad625527319a20b0fa817012e55c08909fa",
"body": null,
"is_bot": false,
"headline": "Add Ko-fi funding link",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-03T22:37:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9131006b41e9d8102b8e960503d28554bcecbb35",
"body": null,
"is_bot": false,
"headline": "Link README to fishka.bio",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-03T22:09:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83ccb3860be597a217e965ee4d08f311e612d7d1",
"body": null,
"is_bot": false,
"headline": "Use GitHub repository URL",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-03T21:53:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a25536a59087bb6131b817b9b4e2caeb405a4dce",
"body": null,
"is_bot": false,
"headline": "Update repository URL",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-03T21:50:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d1efe9a96612cc9de4c462e8c0fe63c46eb93a0",
"body": null,
"is_bot": false,
"headline": "Update package description",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-03T21:31:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b159e5f3b7abb0539f5df75a804847a89cfc7f5",
"body": "Turn readAbif into a faithful 1:1 reader and keep parseAbif as the\ninterpreting convenience layer. Breaking public API (0.x → minor bump).\n\nRaw structure (readAbif):\n- every basecall version exposed via baseCallVariants (called/edited by\n tag number, sequence case preserved); no \"preferred = ground\n[…]\n90 tests incl. exact per-fixture\nlocks (tdir, DATA ranges, PBAS/PCON/PLOC, FWO, RevC, gaps).\n\nContract: meaning-lossless + robust read now; byte-exact layout-preserving\nwriter remains a future opt-in.",
"is_bot": false,
"headline": "ABIF: expose full raw file structure, facts not verdicts (0.4.0)",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-07-03T02:51:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "45511ec9504a5d4e74c27ca30da03ec9dd53bb9f",
"body": null,
"is_bot": false,
"headline": "Add FASTA support",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-06-29T17:41:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f099a0a2c345cd7a83ca5d0ea78ebcdf50cb394a",
"body": "The old names were misleading. Per the ABIF spec:\n\n - DATA1..4 are POST-PROCESSED traces (mobility-corrected, baseline-\n subtracted, color-separated) on modern KB-basecaller-aware\n instruments. On older instruments DATA1..4 IS the raw signal.\n - DATA9..12 are RAW flu\n[…]\n longer\npretends to know which block the caller wants. hasProcessedTraces()\nremains as the helper for detecting modern (both-blocks-present) files.\n\nBreaking change → minor bump (we are still on 0.x).",
"is_bot": false,
"headline": "Rename basecalled/raw to data1To4/data9To12 (0.2.0)",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-05-29T15:25:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ac7016f0c0c049197571a0d8186d8c11cb20d55a",
"body": "The published package now contains only minified output:\n\n dist/index.{mjs,js} ESM + CJS, minified, ~12K each\n dist/abif/index.{mjs,js} subpath entry, minified\n dist/*.d.{ts,mts} generated type declarations\n\nWhat changed\n- Replaced dual-tsc setup (tsconfig.esm.json + tsconfig.cj\n[…]\nnode\"]` because TS 6 + bundler resolution\n no longer auto-discovers @types/*.\n\nVerification: typecheck clean, 22/22 tests pass, lint clean,\nbuild produces minified .mjs/.js and matching .d.ts/.d.mts.",
"is_bot": false,
"headline": "Switch to tsup for minified ESM/CJS + .d.ts build",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-05-29T14:36:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "00db296946de966a7a18e55c93483851e914a317",
"body": "Copy AGENTS.md / CLAUDE.md and the .agents/.claude/.factory directories\nfrom the mitoseq repo, rewriting the prose to describe this library\n(scope, layered design, dev commands, browser-compat constraint).\n\neslint.config.js is a slim variant of mitoseq's: drops the workspace-\nspecific no-restricted-\n[…]\nd abif-spec.json overrides that\ndon't apply here. prettier-plugin-organize-imports added.\n\nCI sanity:\n- npm run lint → clean\n- npm test → 22/22 pass\n- npm run build → ESM + CJS dist/ regenerated",
"is_bot": false,
"headline": "Add agent configs, linter and formatter",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-05-29T14:14:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2703137ce18d89d1d321f52a6f84b33b2c73685e",
"body": "Bring up a new sequencing-I/O library to consolidate the four diverged ABIF\nparsers (abifviewer, mitoseq/formats, hiv/common/bio, basecaller-universal)\ninto a single browser- and Node-compatible package.\n\nLayout\n- src/abif/raw.ts low-level read/write, lossless round-trip\n- src/abif/view.ts type\n[…]\ne support\n\nTests (22) cover round-trip preservation, BioPython A_forward fixture\nedge case, raw-trace (no PBAS) handling, setter round-trip, and\nhigh-level parseAbif consistency on both fixture types.",
"is_bot": false,
"headline": "Initial @fishka/seqio with ABIF parser",
"author_name": "fishka.bio",
"author_login": "fishkabio",
"committed_at": "2026-05-29T14:05:15Z",
"body_truncated": true,
"is_coding_agent": false
}
],
"releases_count": 0,
"commits_last_year": 28,
"latest_release_at": null,
"latest_release_tag": null,
"releases_from_tags": false,
"days_since_last_push": 8,
"active_weeks_last_year": 5,
"days_since_latest_release": null,
"mean_days_between_releases": null
},
"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": "@fishka/seqio",
"exists": true,
"license": "MIT",
"keywords": [
"abif",
"ab1",
"scf",
"fasta",
"fastq",
"chromatogram",
"sanger",
"sequencing",
"bioinformatics"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@fishka/seqio",
"is_deprecated": false,
"latest_version": "0.10.0",
"repository_url": "https://github.com/fishkabio/seqio",
"versions_count": 15,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 9601,
"first_published_at": "2026-05-29T14:42:58.266000Z",
"latest_published_at": "2026-07-21T23:35:37.107000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 8
}
]
},
"popularity": {
"forks": 0,
"stars": 0,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [],
"complete": true,
"collected": 0,
"total_stars": 0,
"collected_at": null
},
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 33921,
"source_files_sampled": 64,
"oversized_source_files": 0,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 6182
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [],
"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": "fishkabio",
"commits": 28,
"avatar_url": "https://avatars.githubusercontent.com/u/298752031?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": false,
"linter_configs": [
"eslint.config.js"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"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/28 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": null,
"reason": "no dependencies found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": null,
"reason": "No tokens found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 5,
"reason": "5 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "051d5621fbcf991f5185852e29a140e78b1ad11e",
"ran_at": "2026-07-30T19:47:49Z",
"aggregate_score": 2,
"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": null,
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/fishkabio/seqio",
"host": "github.com",
"name": "seqio",
"owner": "fishkabio"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 32,
"inputs": {
"security": 20,
"vitality": 27,
"community": 34,
"governance": 28,
"engineering": 52
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "critical",
"name": "Vitality",
"value": 27,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "at_risk",
"name": "Development activity",
"note": null,
"notes": [],
"value": 45,
"inputs": {
"commits_last_year": 28,
"human_commit_share": 1,
"days_since_last_push": 8,
"active_weeks_last_year": 5
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 8 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 8
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "5/52 weeks with commits",
"points": 3.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 5
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "28 commits in the last year",
"points": 13.1,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 28
}
}
],
"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": "critical",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"releases_count": 0
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "no releases published",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases_published",
"params": {}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "no releases",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_releases",
"params": {}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 34,
"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 (Apache-2.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "Apache-2.0"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 66,
"inputs": {
"packages": [
"@fishka/seqio"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 9601
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "9,601 downloads/month across npm",
"points": 53.1,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 9601,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "critical",
"name": "Sustainability & Governance",
"value": 28,
"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/28 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "critical",
"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": 21,
"inputs": {
"followers": 0,
"owner_type": "User",
"is_verified": null,
"owner_login": "fishkabio",
"public_repos": 7,
"account_age_days": 29
},
"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 fishkabio",
"points": 0,
"status": "missed",
"details": [
{
"code": "owner_followers",
"params": {
"count": 0,
"login": "fishkabio"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "7 public repos, account ~0 yr old",
"points": 6.7,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 7
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"@fishka/seqio"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 8
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 8 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 8
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "15 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 15
}
}
],
"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": 52,
"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": 50,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "eslint.config.js",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"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": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": "https://fishka.bio",
"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://fishka.bio",
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "critical",
"name": "Security",
"value": 20,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 20,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 12,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 6,
"scorecard_aggregate": 2
},
"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/28 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "5 existing vulnerabilities detected",
"points": 3.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 2
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 73,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "good",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.607,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 6182
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "17 of 28 human commits state their intent (structured subject or explanatory body)",
"points": 32.4,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 17,
"sampled": 28
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_pinned_dependencies"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "eslint.config.js",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "eslint.config.js"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "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 28",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 28
}
}
],
"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": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 33921,
"source_files_sampled": 64,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/64 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 64,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-30T19:47:53.466621Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/fishkabio/seqio.svg",
"full_name": "fishkabio/seqio",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}