原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 13616,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 1396591,
"CSS": 18398,
"HTML": 8814,
"JavaScript": 15248
},
"pushed_at": "2026-07-18T17:04:14Z",
"created_at": "2026-03-20T14:46:59Z",
"owner_type": "User",
"updated_at": "2026-07-01T15:47:57Z",
"description": null,
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "main",
"license_spdx_raw": null,
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": null,
"name": "Oarkflow",
"type": "User",
"login": "oarkflow",
"company": null,
"location": null,
"followers": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/127721853?v=4",
"created_at": "2023-03-13T06:39:32Z",
"is_verified": null,
"public_repos": 171,
"account_age_days": 1229
},
"license": {
"state": "absent",
"spdx_id": null,
"raw_spdx": null,
"file_present": false,
"scorecard_found": false,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v0.0.2",
"kind": "patch",
"published_at": "2026-07-18T17:04:14Z"
},
{
"tag": "v0.0.1",
"kind": "patch",
"published_at": "2026-05-16T14:08:25Z"
}
],
"recent_commits": [
{
"oid": "f116f48c00d43e82c6450282f2a949a3907c4529",
"body": null,
"is_bot": false,
"headline": "import improve",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-07-01T15:47:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed10f0835dc0859ce9c6ecea683a4ab42c8a1ab0",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-06-30T16:12:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2713bb2b391a8ffd1950cbcbf4924429c07245b",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-19T07:53:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a57f75b09fd20845e44b63d5e12c9f82fba0a8d4",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-19T07:15:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c4cc98e944fbca30a550daa9240089e05347020",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-19T06:22:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d6f0a4c7bf3100ac9ddce57c16ef7b0c7498a7fb",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-19T05:57:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51641a08df6e3d25ae1ba9d6cfdb84e666de4370",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-19T05:32:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f0b990057b9644d9dcf7047aeb073fc7612afafc",
"body": null,
"is_bot": false,
"headline": "implement necessary tools",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-19T05:28:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c5e12dfc872b9977fdb3102346c2f5dab06d1e0e",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-06-18T14:17:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bcf6f8545393d8860076280d0585a111099cb60a",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-16T09:26:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4ebf7d31d7ce37d40bf33feb22b6af7933c86875",
"body": "- Implement compliance validation logic in compliance.go, supporting various profiles (PDF/A, PDF/UA, etc.).\n- Introduce ComplianceReport and ComplianceIssue structures to encapsulate validation results and issues.\n- Add external validation support with veraPDF.\n- Create comprehensive tests for comp\n[…]\nion logic.\n- Update reader package to expose additional functionality for page dictionaries and object numbers.\n- Modify PDF tools to integrate compliance checks into the existing validation workflow.",
"is_bot": false,
"headline": "Add PDF compliance validation and testing",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-06-11T16:25:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "abe714578de2584ffdd35aaecac2a753ab64af39",
"body": "- Added support for PDF/A-4 and PDF/UA-2 compliance markers in the PDF output.\n- Introduced functions to handle tagged layout elements and structure trees in the document.\n- Implemented flattening of alpha channels in images for better PDF rendering.\n- Updated the writer to allow setting of PDF vers\n[…]\nL to PDF conversion.\n- Refactored existing functions to improve compliance handling and structure metadata generation.\n- Enhanced the layout rendering to support tagged content and structure elements.",
"is_bot": false,
"headline": "feat: Enhance PDF compliance and structure support",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-06-11T15:46:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "99e3c766004244c3fb384f8344945f86f502f4d7",
"body": null,
"is_bot": false,
"headline": "feat(pdf): add PDF/A-4 and PDF/UA support with compliance markers",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-06-11T14:25:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d909e834dbbc87baa88c17acaeeca411c6831827",
"body": "- Introduced benchmarks for generating financial reports and HTML to PDF conversion with large images.\n- Implemented a new financial report template structure, including data models for headings, tables, and image grids.\n- Enhanced image handling with caching and passthrough support for PNG images.\n\n[…]\nding functions to support cached image decoding for improved performance in high-volume report generation.\n- Added functionality for rendering financial reports with customizable layouts and metadata.",
"is_bot": false,
"headline": "Add benchmarks and financial report template implementation",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-06-11T14:10:41Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1f8c896b0f845c17065988c757fb6e8719e933d8",
"body": "- Introduced `MergeWithOptions` to handle merging of PDFs and images into a single output PDF.\n- Added support for directory inputs and configuration-based merging through JSON files.\n- Implemented `ImagesToPDF` for direct conversion of images to a PDF.\n- Enhanced `SearchText` and `ValidatePDF` func\n[…]\ne resources are preserved.\n\ntest(reader): add tests for resource preservation during PDF merge\n\n- Implemented a test to verify that merged PDFs retain their original resources, specifically ExtGState.",
"is_bot": false,
"headline": "feat(pdf): add mixed PDF and image merging functionality",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-05T05:23:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f254719a48cff70310eab62e4779da61fd4bbab9",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-01T04:51:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2aeacd05b9b9f3195cde900981be635068faa4fd",
"body": "…ering\n\nSwitch from paragraph grouping to rendering each PDF line as an\nindividual block element with margin-top derived from actual Y gaps.\nThis preserves the original visual structure more accurately.\n\nKey changes:\n- Render lines as divs with computed vertical spacing instead of\n grouping into pa\n[…]\nal gaps between spans and add margin-left spacing\n- Reuse renderSpans in table cells instead of duplicating logic\n- Move avgFontSize to html_builder.go\n- Tighten CSS spacing and improve default styles",
"is_bot": false,
"headline": "refactor(html): replace paragraph-based layout with line-by-line rend…",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-06-01T03:47:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1ccc577c6ff41127db957c2f37bf936255bbf513",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-05-15T15:53:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a7758c2cdb2c6a626ee6a34675268fa5dfc307e9",
"body": "Introduce FontEntry-based font handling across the PDF pipeline to\nsupport TrueType font embedding alongside standard PDF fonts. This\nenables rendering of non-Latin scripts (e.g. Devanagari) by embedding\nglyph subsets into the generated PDF.\n\nKey changes:\n- Add FontEntries map to document Page for e\n[…]\nipeline\n- Add passport sifarish patra example demonstrating Devanagari rendering\n- Update all font propagation paths (pdf.go, template, document) to\n use FontEntries instead of raw object number maps",
"is_bot": false,
"headline": "feat(font): add embedded font support for non-standard typefaces",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-31T10:29:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8692267eae7b6fa5b7064da07ca1e5fbe18ac24c",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-30T05:19:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "74200d1f099de9dbc005d27d7d9306e6753de91c",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-30T05:12:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3849dd23f0b47633715a607fac9081d53017805f",
"body": "…mask\"\n\nThis reverts commit 12401fc40b5f1c8f05b8d3f36dd5fea2fbe5fa69.",
"is_bot": false,
"headline": "Revert \"feat(html): rasterize box-shadow as blurred image with alpha …",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-30T04:09:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4985fcc2f0ef6da0d7474fe9d758c7da6627a0c2",
"body": "…and selector improvements\n\n- Support CSS transform/transform-origin with rotate/scale on div and flex elements\n- Parse aspect-ratio property and Tailwind aspect-N/M fraction classes\n- Add flex child ordering via CSS order property\n- Implement pagination (overflow handling) for flex column and grid \n[…]\nne collection\n- Resolve grid track widths with fr units, auto, and gap spacing\n- Add list-style-type:none support to suppress markers\n- Paint white page background in renderer\n- Add URL-to-PDF example",
"is_bot": false,
"headline": "feat(html): add CSS transforms, aspect-ratio, flex order, pagination …",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-22T06:59:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "12401fc40b5f1c8f05b8d3f36dd5fea2fbe5fa69",
"body": "Replace simple rectangle/rounded-rect shadow drawing with a full\nrasterization pipeline that supports multiple shadow layers, Gaussian\nblur via multi-pass box blur, border-radius-aware masks, and proper\nalpha compositing into a PDF image XObject with soft mask.\n\n- Add boxShadowLayer struct and multi\n[…]\nnd shadow-color utility support via finalizeTailwindShadowProps\n- Normalize arbitrary values (underscore-to-space) in Tailwind parser\n- Convert applyOpacity to emit rgba() using colorToRGB8 resolution",
"is_bot": false,
"headline": "feat(html): rasterize box-shadow as blurred image with alpha mask",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-22T04:31:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cc1d51236008cec2078e238b8316662bfd6b4578",
"body": "…at support and improve box-shadow handling\n\nParse and propagate background-position, background-size, and background-repeat\nCSS properties through the style pipeline, shorthand expansion, and box model.\nGradient backgrounds now render as tiled regions respecting these properties.\n\nRefactor box-shad\n[…]\ng to extract alpha via parseColorWithAlpha and skip\nunsupported blurred/spread/multi-layer/semi-transparent shadows gracefully.\nAdd ExtGState tracking to DrawContext and wire it through to PDF output.",
"is_bot": false,
"headline": "feat(html): add background-position, background-size, background-repe…",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-22T04:11:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "657ea10e9421f8c715cf4b28d30e414f46d57608",
"body": "…dients, and box-shadow rendering\n\nAdd password authentication (user/owner) for RC4-128 and AES-128\nencrypted PDFs in the reader, with full decryption of strings and\nstreams. Reject AES-256 encryption with a clear error message.\n\nEnhance HTML-to-PDF rendering with:\n- Per-corner border-radius parsing\n[…]\nies\n- Quote-aware CSS parsing for complex values (gradients, shadows)\n\nFix signed permissions integer output in encryption dictionary.\nAdd encryption passthrough for streaming writer and FromHTML API.",
"is_bot": false,
"headline": "feat(core): add PDF decryption support, per-corner border radius, gra…",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-22T03:58:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ffd28d27903cab02d2f698799905c2d2b965f023",
"body": "Introduce PDF link annotation support across the full rendering pipeline:\n- Add LinkAnnotation type to layout and DrawContext.AddLink method\n- Write /Annot dictionaries with URI actions in both Writer and StreamingWriter\n- Propagate annotations from page results through document writers\n- Track link\n[…]\nact drawStyledRun helper to deduplicate text rendering logic\n\nUpdate invoice example with real href values and template data helpers.\nRemove deprecated ReplaceMap/ReplaceMapAny in favor of RenderHTML.",
"is_bot": false,
"headline": "feat(html): add clickable link annotations and improve layout pagination",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-22T03:12:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4026610a30af95ccdf2dfe812fd0cc3fa88746c0",
"body": "Replace Go text/template and manual placeholder resolution with fasttpl,\nadding support for conditions ({{ if }}), ranges ({{ range }}), filters,\nand nested keys in HTML templates.\n\n- Add FromHTMLTemplate, FromHTMLTemplateFile, and FromHTMLTemplateStreaming\n APIs to the top-level pdf package\n- Extract inline HTML template in html_invoice example to external file\n- Rewrite template example to demonstrate fasttpl features\n- Add fasttpl template processing option in html converter",
"is_bot": false,
"headline": "feat(template): integrate fasttpl engine for HTML template rendering",
"author_name": "sujit",
"author_login": "sujit-baniya",
"committed_at": "2026-03-21T18:11:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "68fee2114f7b96022f2afd6147a9b07808b6e047",
"body": "…er, and security hardening\n\nAdd extensive test coverage across all packages including unit tests,\nbenchmarks, and fuzz tests for barcode, color, content, core, document,\nfont, html, image, layout, reader, sign, svg, and tailwind packages.\n\nImplement full PDF encryption support (RC4-128, AES-128, AE\n[…]\nnow returns (*Document, error) instead of *Document; BuildXObject now returns an additional error value; AddPage on Writer now returns (int, error); gf256Div returns (byte, error) instead of panicking",
"is_bot": false,
"headline": "feat: add comprehensive tests, encryption, tagged PDF, streaming writ…",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-03-21T16:54:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bb69e8f5cc04feb6a1d2bd6436c5c3c29f400f28",
"body": null,
"is_bot": false,
"headline": "update",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-03-20T14:48:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3cdb33ab9e151e3cee90e43bcff465387800d9d4",
"body": null,
"is_bot": false,
"headline": "init",
"author_name": "Oarkflow",
"author_login": null,
"committed_at": "2026-03-20T14:34:30Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 2,
"commits_last_year": 31,
"latest_release_at": "2026-07-18T17:04:14Z",
"latest_release_tag": "v0.0.2",
"releases_from_tags": false,
"days_since_last_push": 6,
"active_weeks_last_year": 8,
"days_since_latest_release": 6,
"mean_days_between_releases": 63.1
},
"community": {
"has_readme": true,
"has_license": false,
"has_description": false,
"has_contributing": false,
"health_percentage": 14,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/oarkflow/pdf",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/oarkflow/pdf",
"is_deprecated": false,
"latest_version": "v0.0.2",
"repository_url": "https://github.com/oarkflow/pdf",
"versions_count": 2,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-01T15:47:39Z",
"latest_version_yanked": null,
"days_since_latest_publish": 23
}
]
},
"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": [
"examples"
],
"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": 90693,
"source_files_sampled": 199,
"oversized_source_files": 2,
"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/dop251/goja",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20260701091749-b07b74453ea9"
},
{
"name": "golang.org/x/image",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.43.0"
},
{
"name": "golang.org/x/net",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.56.0"
},
{
"name": "github.com/go-text/typesetting",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.3.4"
},
{
"name": "github.com/oarkflow/fasttpl",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.3"
},
{
"name": "github.com/urfave/cli/v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.9.0"
},
{
"name": "golang.org/x/term",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.44.0"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 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": "sujit-baniya",
"commits": 21,
"avatar_url": "https://avatars.githubusercontent.com/u/4959215?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": [],
"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": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"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": 10,
"reason": "project is fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 0,
"reason": "license file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "18 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 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": 9,
"reason": "1 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "f116f48c00d43e82c6450282f2a949a3907c4529",
"ran_at": "2026-07-24T18:28:31Z",
"aggregate_score": 4.1,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-01T15:47:54Z",
"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/oarkflow/pdf",
"host": "github.com",
"name": "pdf",
"owner": "oarkflow"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"security": 41,
"vitality": 76,
"community": 12,
"governance": 33,
"engineering": 34
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 76,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"commits_last_year": 31,
"human_commit_share": 1,
"days_since_last_push": 6,
"active_weeks_last_year": 8
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "8/52 weeks with commits",
"points": 5.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 8
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "31 commits in the last year",
"points": 13.5,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 31
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "18 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 92,
"inputs": {
"releases_count": 2,
"latest_release_tag": "v0.0.2",
"releases_from_tags": false,
"days_since_latest_release": 6,
"mean_days_between_releases": 63.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "2 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 2
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~63.1 days",
"points": 19.8,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 63.1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 12,
"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": "critical",
"name": "Community health",
"note": null,
"notes": [],
"value": 25,
"inputs": {
"has_readme": true,
"has_license": false,
"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": "no license file detected",
"points": 0,
"status": "missed",
"details": [
{
"code": "license_absent",
"params": {}
}
],
"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": 33,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 13,
"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 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"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": 43,
"inputs": {
"followers": 4,
"owner_type": "User",
"is_verified": null,
"owner_login": "oarkflow",
"public_repos": 171,
"account_age_days": 1229
},
"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": "4 followers of oarkflow",
"points": 5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 4,
"login": "oarkflow"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "171 public repos, account ~3 yr old",
"points": 19.7,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 171
}
},
{
"code": "account_age_years",
"params": {
"years": 3
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"packages": [
"github.com/oarkflow/pdf"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 23
},
"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 23 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 23
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "2 published versions",
"points": 12,
"status": "partial",
"details": [
{
"code": "published_versions",
"params": {
"count": 2
}
}
],
"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": "at_risk",
"name": "Engineering Quality",
"value": 34,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"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": 30,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"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": 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": "at_risk",
"name": "Documentation",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"has_description": false
},
"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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 0,
"status": "missed",
"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": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 41,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"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": 41,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 12,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 6,
"scorecard_aggregate": 4.1
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"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 fuzzed",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "18 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "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": "1 existing vulnerabilities detected",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 1
},
"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": 53,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 24,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.452,
"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": "14 of 31 human commits state their intent (structured subject or explanatory body)",
"points": 24.1,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 14,
"sampled": 31
}
}
],
"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": 62,
"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 31",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 31
}
}
],
"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": 99,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 90693,
"source_files_sampled": 199,
"oversized_source_files": 2
},
"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": "2/199 source files over 60KB",
"points": 54.4,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 199,
"oversized": 2
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-24T18:28:36.034026Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/oarkflow/pdf.svg",
"full_name": "oarkflow/pdf",
"license_state": "absent",
"license_spdx": null
}