公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-28 02:00 UTC

yunanwg / brilliant-CV

💼 another CV template for your job application, yet powered by Typst and more

Typst · PythonApache-2.0★ 812 星标⑂ 101 复刻始于 2023年4月在 GitHub 上查看 ↗

yunanwg/brilliant-CV 的健康指数为 100 分中的 73 分,处于「良好」区间。 其得分最高的类别是Engineering Quality(92/100),最低的是Sustainability & Governance(52/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

73
总分 / 100
良好

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

73
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

Yunan Wang个人账户
37 关注者6 个公开仓库始于 2021年1月

该仓库由个人账户拥有。相较于组织支持的项目,单一所有者项目的延续性风险更高。

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

86优秀 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
11.8/36提交节奏 — 52 周中有 17 周有提交
18/18提交量 — 最近一年 206 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year206
human_commit_share0.9
days_since_last_push0
active_weeks_last_year17

发布纪律

100优秀
评分方式
27/27有发布版本 — 已发布 26 个发布版本
36/36发布时效 — 最近一次发布版本于 8 天前
27/27发布节奏 — 约每 26.2 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count26
latest_release_tagv4.1.0
releases_from_tags
days_since_latest_release8
mean_days_between_releases26.2
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

68中等 · 占总体的 18%
评分方式
47.2/60星标 — 812 个星标
16.7/25复刻 — 101 个复刻
1.7/15关注者 — 3 位关注者
所用输入
forks101
stars812
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

70良好
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(Apache-2.0)
18/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

52中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
1.8/22.5提交分布 — 头号贡献者编写了 92% 的提交
13.5/13.5贡献者广度 — 21 位贡献者
6/10OpenSSF Scorecard:Contributors — project has 2 contributing companies or organizations -- score normalized to 6
所用输入
bus_factor1
contributors_sampled21
top_contributor_share0.919
评分方式
46.8/46.8议题解决 — 100% 的议题已关闭
36.1/38.3PR 接受 — 已裁定的 PR 中 120/127 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/20 approved changesets -- score normalized to 0
所用输入
merged_prs120
open_issues0
closed_issues99
issue_closed_ratio1
closed_unmerged_prs7
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
11.4/25所有者影响力 — yunanwg 有 37 位关注者
17.2/25既往记录 — 6 个公开仓库,账户约 5 年
所用输入
followers37
owner_typeUser
is_verified
owner_loginyunanwg
public_repos6
account_age_days2,022
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。

工程质量

基础的工程与文档实践是否到位?

92优秀 · 占总体的 20%

工程实践

94优秀
评分方式
24/24CI 工作流 — 9 个工作流
24/24存在测试
16/16Linter 配置
9.6/9.6Pre-commit 钩子
0/6.4.editorconfig
20/20OpenSSF Scorecard:CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

90优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://typst.app/universe/package/brilliant-cv
10/10仓库描述
10/10主题标签 — 7 个主题标签
0/10Wiki
所用输入
topicscv, pdf, typst, typst-template, resume, resume-template, prompt-injection
has_wiki
homepagehttps://typst.app/universe/package/brilliant-cv
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

71良好 · 占总体的 16%

安全态势

64中等
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/20 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
4/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
5/5SAST — SAST tool is run on all commits
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate6.4
已排除计分(无数据或不适用):signed_releases。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
0/40没有长期未处理的公告 — 没有公告带有发布日期
所用输入
sourceosv
advisories0
affected_packages0
assessed_packages3
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
已排除计分(无数据或不适用):间接依赖不含已知公告, 没有长期未处理的公告。 其余权重已重新归一化。 已将 3 个已解析依赖与 OSV 比对。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

81良好 · 占总体的 0%
评分方式
45/45代理指令 — .github/copilot-instructions.md, AGENTS.md, CLAUDE.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 90 次人类提交中有 90 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_files.github/copilot-instructions.md, AGENTS.md, CLAUDE.md
agent_instruction_max_bytes4,733
评分方式
18/18一条命令的引导启动 — justfile
22/22自动化测试
11/11Lint / 格式化配置
0/11静态类型检查
10/10可复现环境 — Dockerfile
10/10已体现的代理实践 — 最近 100 次提交中有 63 次由代理编写或署名代理
8/8自动化维护 — 最近 100 次提交中有 10 次为自动依赖更新
8/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
所用输入
has_nix
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_filesjustfile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.63
toolchain_manifests
dependency_bot_commit_share0.1
评分方式
0/45可类型检查的代码 — Typst,未配置类型检查
55/55可控的文件大小 — 采样的 6 个源文件中有 0 个超过 60KB
所用输入
primary_languageTypst
largest_source_bytes15,997
source_files_sampled6
oversized_source_files0

关键数据

812GitHub 星标
21贡献者
206最近 12 个月提交数
0距最近推送天数
26发布版本数
1巴士系数(bus factor)
0开放议题
PyPI软件包生态系统数

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

更多细节

Star 与 Fork 历史 0 ★ / 101 ⇿
0Star
101Fork
25发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

02040608010012010132023-062024-122026-07
主版本 4次版本 10修订 10

每个点涵盖 3 天。

OpenSSF Scorecard 6.4 / 10
6.4综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-28 01:59 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/20 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
8Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 8
10SASTSAST tool is run on all commits
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
全部依赖 3

来自 GitHub 依赖图的完整解析依赖集合:0 个直接依赖与 3 个间接(传递)软件包。仓库提交锁文件时,传递闭包才是完整的。

注册表软件包版本关系
PyPIjsonschema4.26.0间接
PyPImkdocs-glightbox0.5.2间接
PyPImkdocs-material9.7.7间接
依赖安全公告 0

该仓库未发布可被索引解析的包,因此评估的是其自身的依赖图——共 3 个包,其中也包含从不交付的开发与测试版本固定:0 个存在已知公告,0 个为直接依赖。

没有已知公告影响已评估的依赖。

公告表示依赖图中记录的版本落入某条公告的受影响范围。可达性未经分析,且依赖图包含开发与测试的版本固定——某项发现可能只涉及工具链而非交付的软件。

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "cv",
        "pdf",
        "typst",
        "typst-template",
        "resume",
        "resume-template",
        "prompt-injection"
      ],
      "is_fork": false,
      "size_kb": 20098,
      "has_wiki": false,
      "homepage": "https://typst.app/universe/package/brilliant-cv",
      "languages": {
        "TeX": 1382,
        "Just": 11173,
        "Shell": 10869,
        "Typst": 117486,
        "Python": 33303,
        "Dockerfile": 4782
      },
      "pushed_at": "2026-07-27T11:21:57Z",
      "created_at": "2023-04-28T22:58:24Z",
      "owner_type": "User",
      "updated_at": "2026-07-27T15:31:11Z",
      "description": "💼 another CV template for your job application, yet powered by Typst and more",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Typst",
      "significant_languages": [
        "Typst",
        "Python"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Yunan Wang",
      "type": "User",
      "login": "yunanwg",
      "company": null,
      "location": "France",
      "followers": 37,
      "avatar_url": "https://avatars.githubusercontent.com/u/77310871?v=4",
      "created_at": "2021-01-12T02:27:43Z",
      "is_verified": null,
      "public_repos": 6,
      "account_age_days": 2022
    },
    "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": [
        {
          "tag": "v4.1.0",
          "kind": "minor",
          "published_at": "2026-07-19T09:45:59Z"
        },
        {
          "tag": "v4.0.1",
          "kind": "patch",
          "published_at": "2026-05-01T10:09:31Z"
        },
        {
          "tag": "v4.0.0",
          "kind": "major",
          "published_at": "2026-04-29T20:01:26Z"
        },
        {
          "tag": "v3.3.0",
          "kind": "minor",
          "published_at": "2026-03-22T11:12:48Z"
        },
        {
          "tag": "v3.2.0",
          "kind": "minor",
          "published_at": "2026-03-10T20:57:32Z"
        },
        {
          "tag": "v3.1.2",
          "kind": "patch",
          "published_at": "2026-01-20T13:14:22Z"
        },
        {
          "tag": "v3.1.1",
          "kind": "patch",
          "published_at": "2025-12-05T21:30:39Z"
        },
        {
          "tag": "v3.1.0",
          "kind": "minor",
          "published_at": "2025-12-05T21:16:59Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2025-12-05T14:32:14Z"
        },
        {
          "tag": "v2.0.8",
          "kind": "patch",
          "published_at": "2025-11-25T20:07:26Z"
        },
        {
          "tag": "v2.0.7",
          "kind": "patch",
          "published_at": "2025-10-21T07:40:13Z"
        },
        {
          "tag": "v2.0.6",
          "kind": "patch",
          "published_at": "2025-09-04T14:16:45Z"
        },
        {
          "tag": "v2.0.5",
          "kind": "patch",
          "published_at": "2025-03-06T08:07:35Z"
        },
        {
          "tag": "v2.0.4",
          "kind": "patch",
          "published_at": "2025-01-21T23:53:35Z"
        },
        {
          "tag": "v2.0.3",
          "kind": "patch",
          "published_at": "2024-10-09T14:43:10Z"
        },
        {
          "tag": "release/v2.0.2",
          "kind": "other",
          "published_at": "2024-08-20T17:55:24Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2024-07-29T09:58:23Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2024-07-14T08:26:53Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2024-07-13T16:04:14Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2024-05-31T19:28:05Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2024-05-14T13:37:23Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2023-11-01T18:04:20Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2023-09-16T13:51:22Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2023-08-29T10:20:27Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2023-08-20T14:15:47Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2023-07-14T23:16:48Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "7772666e9848393932103830b8e71d8a7d695a2c",
          "body": "Bumps [typst-community/setup-typst](https://github.com/typst-community/setup-typst) from 4 to 5.\n- [Release notes](https://github.com/typst-community/setup-typst/releases)\n- [Commits](https://github.com/typst-community/setup-typst/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependency-name: typst-\n[…]\n-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Yunan Wang <77310871+yunanwg@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump typst-community/setup-typst from 4 to 5 (#233)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-27T11:19:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f5540ddacaa8569359f634b4925fb084fbda0bc0",
          "body": "Bumps [extractions/setup-just](https://github.com/extractions/setup-just) from 2 to 4.\n- [Release notes](https://github.com/extractions/setup-just/releases)\n- [Commits](https://github.com/extractions/setup-just/compare/v2...v4)\n\n---\nupdated-dependencies:\n- dependency-name: extractions/setup-just\n  d\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump extractions/setup-just from 2 to 4 (#232)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-27T07:21:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af64cc520445180c0f235975846ed4284f27134f",
          "body": "* docs(readme): rewrite key features around user value\n\n- Lead with the v4 profile/language decoupling: a profile is a complete,\n  self-contained variant bindable to a job/audience/language, not a language\n  whitelist entry.\n- Reframe the three features as user benefits (bind anything / compose &\n  \n[…]\nn the pinned test image (Noto Sans CJK SC for\nzh). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): rewrite key features around user value (#231)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-22T21:01:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ac0f6d86d3108cc015734a956446ab6aebd023f7",
          "body": "Interactive @claude (claude.yml):\n- Install Typst + just and run `just link` before the action so Claude can\n  compile-test its changes and run the native panic/guard suites; the tytanic\n  visual suite stays in test.yaml (Docker + pinned fonts, not deterministic\n  outside the test image).\n- Pin mode\n[…]\ngression-test convention.\n- Pin model to claude-sonnet-5, cap at 15 turns, sticky comment already implied\n  by single-run trigger.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(github): tune Claude Code workflows for this repo (#230)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-22T20:21:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c483d1b0cce57f0dc6751c9e3d22cd363d2bb1cc",
          "body": null,
          "is_bot": false,
          "headline": "feat(github): add Claude Code GitHub Workflow (#229)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-22T19:59:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdb9a5884563593791fd9e3aad7007c06c425fc9",
          "body": null,
          "is_bot": false,
          "headline": "fix: clear Typst package warnings (#228)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-19T10:37:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4812a3bfc79a6a58625d6f290ac9b0bff1e6bc51",
          "body": "* fix: preserve Typst submission template\n\n* fix: keep Typst update description minimal",
          "is_bot": false,
          "headline": "fix: preserve Typst submission template (#227)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-19T10:34:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "908fb35a0cc6f939c48241db4334d48ba86ac8ba",
          "body": null,
          "is_bot": false,
          "headline": "fix: make release upstream setup idempotent (#226)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-19T09:40:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f369014d05c96d07171a85197cb0e96039f1f92d",
          "body": "* fix: close release preparation gaps\n\n* chore: prepare 4.1.0 release",
          "is_bot": false,
          "headline": "chore: prepare 4.1.0 release (#224)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-19T09:20:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20dedd97ef8557b1851805e69d2277dbcb1f6dd3",
          "body": null,
          "is_bot": false,
          "headline": "ci: make sponsor refresh manual-only (#225)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-19T09:19:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "281bdfe90d6a3227444ca6859eac4253975ccd03",
          "body": "* build(deps): bump actions/download-artifact from 7.0.0 to 8.0.1\n\nBumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7.0.0 to 8.0.1.\n- [Release notes](https://github.com/actions/download-artifact/releases)\n- [Commits](https://github.com/actions/download-artifact/co\n[…]\nned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: yunanwg <77310871+yunanwg@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/download-artifact from 7.0.0 to 8.0.1 (#223)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-19T09:05:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "021125159262d867ce0676efdb56873b348d8bc7",
          "body": "Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 7.6.0 to 8.3.2.\n- [Release notes](https://github.com/astral-sh/setup-uv/releases)\n- [Commits](https://github.com/astral-sh/setup-uv/compare/37802adc94f370d6bfd71619e3f0bf239e1f3b78...11f9893b081a58869d3b5fccaea48c9e9e46f990)\n\n---\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump astral-sh/setup-uv from 7.6.0 to 8.3.2 (#222)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-19T09:02:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ef874d30b6da29893abee479b5f0796d991f0894",
          "body": "Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.12.0 to 4.2.0.\n- [Release notes](https://github.com/docker/setup-buildx-action/releases)\n- [Commits](https://github.com/docker/setup-buildx-action/compare/8d2750c68a42422c14e847fe6c8ac0403b4cbd6f...bb05f3f5519dd\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump docker/setup-buildx-action from 3.12.0 to 4.2.0 (#221)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-19T09:00:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8e2f67b99d8f38212f6c55747c46788cadba01b9",
          "body": null,
          "is_bot": false,
          "headline": "ci: pin and isolate automation (#220)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-19T08:36:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f97047a5996033cdb3cbd2726401c6dcff9aa97",
          "body": null,
          "is_bot": false,
          "headline": "ci: make release contract fail closed (#219)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-19T08:32:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41a1fc4fc8c93bdefb81f545a5957dd8a3e67bf8",
          "body": null,
          "is_bot": false,
          "headline": "fix: define public API and metadata contract (#218)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T21:39:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2398ed281607d8f0ecb07361a468857d2b106d09",
          "body": "docs: ship strict schema and retire PDF docs",
          "is_bot": false,
          "headline": "docs: ship strict metadata schema and retire PDF docs (#217)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T21:35:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13c721236be1432df9519cf0fde000d592d5b2d7",
          "body": "* test: regenerate visual refs on arm64 CI runner\n\n* test: mark cv-entry-continued-multiline-date as persistent\n\ntytanic infers persistent-vs-compile-only from the presence of ref/;\nwithout it, tt update filtered the new component test and never\ngenerated its first ref. Placeholder to be replaced by\n[…]\n* test: regenerate visual refs on arm64 CI runner\n\n---------\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: regenerate visual refs after audit batch (#216)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T20:24:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8d4862f1a892fc5affa670cc51549b17a5f0fdbb",
          "body": "… (#215)\n\nci: add manual workflow to regenerate visual refs on arm64 runner\n\nReusable maintainer tool: dispatch on any branch after an intentional\nlayout change; runs tt update inside the pinned Docker image on the\nnative arm64 runner (the canonical ref environment) and pushes the\nregenerated tests/\n[…]\nthe same branch. Removes the\nneed for local arm64 hardware to regenerate refs.\n\n\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add manual workflow to regenerate visual refs on the arm64 runner…",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T20:03:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "731bc36d035d5a1a856835a08e7b7d73b916f3c8",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/checkout from 4 to 7 (#214)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T20:01:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ad030c4329f240b90c0329f4a834aa13e413096",
          "body": "Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6 to 7.\n- [Release notes](https://github.com/docker/build-push-action/releases)\n- [Commits](https://github.com/docker/build-push-action/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: docker/build-push-\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump docker/build-push-action from 6 to 7 (#213)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T20:01:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "459bf70b7510d7f1b9b4984c737f10ca2dc74fd1",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifac\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/upload-artifact from 4 to 7 (#212)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T20:01:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "84370090b16b6f28791bbbbf07d791e5d251457f",
          "body": "Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 6 to 7.\n- [Release notes](https://github.com/astral-sh/setup-uv/releases)\n- [Commits](https://github.com/astral-sh/setup-uv/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: astral-sh/setup-uv\n  dependency-version: '\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump astral-sh/setup-uv from 6 to 7 (#211)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T20:01:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "734a4b2d5865ddbfd34cc63852f3b9e3c9517bba",
          "body": "Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.\n- [Release notes](https://github.com/softprops/action-gh-release/releases)\n- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/softprops/\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): bump softprops/action-gh-release from 2 to 3 (#210)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-18T20:01:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08df8f8ac0affa21524bb60eb48a64b68d868ce2",
          "body": "…on PRs (#204)\n\n* ci: dedupe triggers, add concurrency, pin typst floor, validate docs on PRs\n\n- compile.yaml: restrict the bare `push:` trigger to `branches: [main]`\n  so same-repo PR commits no longer fire both push and pull_request\n  events for the same commit. Add a concurrency group (per\n  work\n[…]\nt is 1.3.0)'.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: dedupe triggers, add concurrency, pin typst floor, validate docs …",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T19:57:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fac8148a75fe4e1f77a96c9271b78ab7cd0162fa",
          "body": "* chore(github): structured YAML issue forms + automation disclosure\n\nReplace GitHub's default bug_report.md/feature_request.md scaffold\n(still asking for \"Browser [e.g. chrome, safari]\") with YAML issue\nforms that front-load what the solo maintainer actually needs first:\nbrilliant-cv version, Typst\n[…]\ne inaccurate.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(github): structured YAML issue forms (#207)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T19:57:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b6490c4408bec517b8fb4817fe3d4c9d5f39173e",
          "body": "Reorder the release job so 'Create GitHub Release' runs after 'Create\nPR in upstream repository' instead of right after version extraction.\nv3.0.0 shipped a public GitHub Release from a run that failed before\never reaching typst/packages, leaving a phantom release with no\ncorresponding upstream PR. \n[…]\nonger leaves the working tree with the bumped version instead of\nthe original.\n\n\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(release): create GitHub Release only after package validation (#202)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T19:56:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d540febbffb6efa75a10d4b3d287b361ef18b0eb",
          "body": "…(#205)\n\ntest: add determinism+parity guards, cv-publication units, api-ref self-check\n\nAdds tests/guards.sh, a fast bash+python3-stdlib script wired into `just\ntest`, `just test-fast`, and CI: a determinism guard (fails on\n`datetime.today` in any test.typ/fixture.typ, since letter()'s `date:`\ndefau\n[…]\n already\nignored tests/**/{out,diff}/ globally, so no change was needed there.\n\n\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: machine guards, cv-publication units, api-reference self-check …",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T19:53:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "96232bd7d2862cb7540bad9a67223f54c256b33c",
          "body": "…ssets (#209)\n\nchore: Universe compliance fixes + replace UCLA seal + shrink shipped assets\n\nUniverse compliance:\n- README.md: thumbnail.png <img> src was a relative path, which breaks\n  once the file is stripped from the published bundle per Universe\n  manifest rules (\"must not be referenced anywhe\n[…]\nged in all 5\nprofiles (en/fr/de/it/zh) and those refs are pixel-deterministic.\n\n\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: Universe compliance fixes, replace UCLA seal, shrink shipped a…",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T19:52:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c1d520db9e8768cca09f40c764653daec9c50d5a",
          "body": "…(#208)\n\nThe [inject] feature previously shipped enabled in all five profiles and\nwas marketed without any mention of risk, while detection of hidden\nresume text by screening vendors keeps improving. Plan adopted: keep the\nfeature, make it honest.\n\n- all five profiles now ship injected_keywords_list\n[…]\n (the removed text was white on\nwhite), but run 'just test-update' to confirm.\n\n\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(inject)!: make ATS keyword injection opt-in with honest framing …",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T19:47:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8b9f492dd5f051149ddc0309afccfe4247379adc",
          "body": "… (#206)\n\ndocs: ship font/privacy guidance with typst init + zh quickstart\n\ntypst init @preview/brilliant-cv delivers only template/ — the README and\ndocs site never reach those users, which is why Font Awesome \"boxes instead\nof icons\" has been re-reported for years (#11, #31, #57, #192). Put the\ngu\n[…]\nn upgrade.\n\nAll changes are comments/docs only; no rendering behavior changes.\n\n\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: ship font/privacy guidance with typst init + Chinese quickstart…",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T19:46:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e7f798604f494d0829925973df6889d7471d301c",
          "body": "…ush (#203)\n\nThe `bump` recipe used BSD-only `sed -i ''`, which exits with status 2 under\nGNU sed (\"no input files\") because GNU sed treats the empty string as the\nin-place suffix argument rather than a no-backup marker. Reproduced with\nGNU sed 4.9: `sed -i '' 's/.../.../' file` fails outright, whil\n[…]\nrs to \"the\nUniverse-published package\" generically so it can't go stale again.\n\n\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(justfile): portable sed, test gate before release, single-tag p…",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T19:45:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3644172524b39f5eb16a6ddb4a4ca30f7b3c7643",
          "body": "…s (#201)\n\n* fix(cv): repair broken default paths and duplicate description render\n\nThree defects hidden by the fact that every shipped profile sets all\noptional keys, so fallback paths never executed:\n\n- before_entry_skip / before_entry_description_skip defaults were length\n  literals passed to the\n[…]\nte' on arm64.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01CVqmjueMxXJSNZQJZdZE6x\n\n---------\n\nCo-authored-by: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: repair shipped-example rendering defects and broken default path…",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T19:43:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "029041f3e7d57ec348af9ab4c2d737f6cc0c259e",
          "body": "feat(cv): allow custom header info content",
          "is_bot": false,
          "headline": "feat(cv): add composable header info slot (#199)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T11:26:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28f72d76430f08665e581dd2a3b3605c2c478234",
          "body": null,
          "is_bot": false,
          "headline": "docs: unify contributor and agent guidance (#198)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T11:06:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f5fcd6ef01721c76b5b321d9ba60d47217460d8",
          "body": null,
          "is_bot": false,
          "headline": "test: upgrade toolchain to Typst 0.15.1 (#196)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T10:40:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb8f60dc77fffc220cd4e6e9df4c57bad536fe7f",
          "body": null,
          "is_bot": false,
          "headline": "feat(cv): make skill type width configurable (#195)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T10:20:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a55753cdc913cca1acfda728d3c417996567eaa",
          "body": null,
          "is_bot": false,
          "headline": "docs: document Font Awesome setup for Typst Web (#194)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T10:04:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99c6b911e5db27c6bce7ea01ee475cbbc9ecdc09",
          "body": "* fix: Correctly slice Unicode titles\n\n* fix(cv): slice section titles by grapheme clusters\n\n---------\n\nCo-authored-by: yunanwg <77310871+yunanwg@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: Correctly slice Unicode titles (#187)",
          "author_name": "SimonIT",
          "author_login": "SimonIT",
          "committed_at": "2026-07-18T09:47:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "614b1d7cc06b7ef2e12a5ef7227e9bea69eb8307",
          "body": null,
          "is_bot": false,
          "headline": "test: stabilize visual snapshots across arm64 hosts (#193)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-07-18T09:39:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcc4c61f73345b2b133c76ca5d1944d1d2af439e",
          "body": "…#184)\n\n* fix(cv): collapse reserved row when title and date are empty (#181)\n\ncv-entry laid each entry out as two fixed rows (title/date on top,\nsociety/location below). When a user omitted both top-row fields, the\nempty row still reserved a line plus its 6pt gutter, leaving a blank gap\nabove the v\n[…]\n the\ncollapse + one-sided-gap alignment behavior.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(cv): collapse reserved row when title and date are empty (#181) (…",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-06-17T19:38:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b165e3f087502ce09a6c6288acfbd90ed84953b5",
          "body": null,
          "is_bot": false,
          "headline": "build: bump version to 4.0.1",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-05-01T10:09:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea14a9786caa0b0a365fc6d2da14f84639214ab9",
          "body": "The release recipe ran `just bump $VERSION` then immediately `just\nbuild`, which fails because the version-bumped template/ imports\n`@preview/brilliant-cv:$VERSION` while the local package link is\nstill registered at the old version. Caught by running\n`just release 4.0.1` from a branch with v4.0.0 l\n[…]\nt tried to download 4.0.1 from Universe, didn't find it, and\nerrored out.\n\nInsert `just link` between bump and build so the local registration\nrefreshes to the new version before the smoke build runs.",
          "is_bot": false,
          "headline": "build(release): re-link local package after bump",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-05-01T10:08:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "91606c1c7b33d21d10945475fa3969c72497b45e",
          "body": "* fix(api): kebab-case cv-section param + absolute README link\n\nTwo lint fixes flagged by typst-package-check on the upstream\nbrilliant-cv:4.0.0 PR (typst/packages#4739, since closed in favor\nof v4.0.1).\n\n1. README.md:52 linked to a relative `CONTRIBUTING.md` that doesn't\n   exist in the published p\n[…]\nrs` in metadata.toml stays\nunchanged, since TOML keys aren't governed by Typst's kebab-case\nconvention).\n\nVerified by compiling docs/pdf/docs.typ inside the test image —\nclean build, 477KB PDF output.",
          "is_bot": false,
          "headline": "fix(api): kebab-case cv-section param + absolute README link (#180)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-05-01T10:02:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6252c9090d2bbb08e85a163cdbf63c81a0609835",
          "body": "* docs(claude): require compile-testing typst snippets in docs\n\nCaught by Codex review on #178: shipped a docs/recipes.md snippet\nusing a `description:` parameter on cv-honor that doesn't exist.\nSource-of-truth for every public function name and parameter is\nsrc/cv.typ — not memory.\n\nAdds a Conventi\n[…]\nic APIs (cv() and letter()) actually live in src/lib.typ. Fix:\nsay \"src/\" generically, then enumerate which functions live where so\ncontributors check the right file for the import their snippet uses.",
          "is_bot": false,
          "headline": "docs(claude): compile-test typst snippets in docs/ before commit (#179)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-05-01T09:40:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6592aa6bb4ae42a4a8720dc99121cd79b6479305",
          "body": "* docs(recipes): add cv-honor verification link recipe\n\nCloses #171 by documenting how to add verification URLs and extra\nmetadata (credential ID, expiry, verification link) to certificate\nentries using the existing `url` parameter and content-flexible\n`description` field on `cv-honor`.\n\nRationale f\n[…]\ntial ID, expiry, multiple links). cv-entry does\n   have a content-flexible `description` field.\n\nCompile-tested both snippets against /src against minimal-metadata\nfixture before committing this time.",
          "is_bot": false,
          "headline": "docs(recipes): add cv-honor verification link recipe (#171) (#178)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-05-01T09:39:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b23a84cfefe35321bb16d77628c5c410f63fc0d2",
          "body": "fix(footer): give long center caption all remaining width\n\nThe 3-column footer layout (with display_page_counter = true) was\nlocked to (1fr, 1fr, 1fr), squeezing a long center caption into a\nthird of the page regardless of how short the name and counter were.\nReporter @im-trisha hit visible wrapping\n[…]\n a long center string. Verified by\ntemporary revert that without the fix the test page renders 907x68\n(wrapped to multiple lines); with the fix it renders 907x47 (single\nline as expected).\n\nFixes #173",
          "is_bot": false,
          "headline": "fix(footer): give long center caption all remaining width (#173) (#177)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-04-30T14:41:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b4af70965963ce177b6a6ba275b629265ab5b29",
          "body": "The maintainer is on Apple Silicon. Running the linux/amd64 test image\nvia Rosetta 2 produces FreeType-rasterized pixels that drift from\nnative x86_64 (empirically: ~5912 deviating pixels in the Roboto\nheader — the \"John Doe\" text — across all four Latin profile\nregression tests; Source Sans 3 body \n[…]\nr arm64 native and have been\nregenerated: cv-de, cv-en, cv-fr, cv-it (Roboto header pixels).\nComponent tests, cv-zh, and the letter regression tests were\nbyte-identical across archs and are unchanged.",
          "is_bot": false,
          "headline": "chore(test): migrate test infra to single arm64 (#176)",
          "author_name": "Yunan Wang",
          "author_login": "yunanwg",
          "committed_at": "2026-04-30T14:16:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d833b92c739c8dcbf3c3bf994f4bbbef1b03fb2d",
          "body": "Bug fixes and behavior changes that touch `src/` should land with a\ntytanic ref or panic-shell test in the same PR. Skip only for\ndocs-only or policy-only changes.\n\nThe aim is to grow `tests/` into a corpus of real user-reported\nscenarios — every issue we close becomes a permanent guard against\nthe same regression.",
          "is_bot": false,
          "headline": "docs(claude): require regression test for issue fixes",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-30T13:21:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6c84bd4fb7e15b50b855b55b54846081ebb07c9",
          "body": "The closing `v(-10pt)` after `cv-entry-start` is shared by both code\npaths (with-logo / without-logo). With a logo, the image's natural row\nheight absorbs part of the negative space, so the collapse looks right.\nWithout a logo the row is just text-height and -10pt overlaps the\nfollowing `cv-entry-co\n[…]\nadata) — ref regenerated; the diff is the gap that was\n  bug-tight before\n- new components/cv-entry-start-continued-with-logo — pins the\n  with-logo branch so it can't silently drift later\n\nFixes #172",
          "is_bot": false,
          "headline": "fix(cv-entry-start): make negative skip logo-aware",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-30T13:21:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89bcf9e2ae324744be4c4c0715a2188966add2f8",
          "body": "The hero image was 2480x3508 (A4 @ 300 DPI), oversized for the README\non GitHub and the Typst Universe listing. 1600px wide is still\nretina-friendly.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(assets): downsample README thumbnail to 1600px wide",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "845863e6506ef4538f08f2baea3f305eeffc6aea",
          "body": "Move the v4 migration callout up next to the hero, drop the standalone\nDocumentation section (it was just a link), trim Key Features from 6\ngeneric bullets to 3 differentiated ones, fold How to Use into a 3-step\nQuick Start that ends with a single link to the docs site, and remove\nthe Configuration table (the docs site already has a Configuration\nReference). Also strip emoji from body section headings.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(readme): restructure for clearer entry path",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d896548ba198df46d92099d7a4a2c9c7dc615caa",
          "body": "Codex adversarial review caught a real ship-blocker: my earlier commit\n7dfe5fc added CLAUDE.md + CONTRIBUTING.md to typst.toml's `exclude`\nlist, but the release workflow doesn't read typst.toml — it had its\nown hard-coded `rsync --exclude` set that drifted independently. A\ndry-run of the release wor\n[…]\nerged on this finding;\npass 2 escalated severity from medium -> high after running an actual\nrsync dry-run to verify the leakage).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(release): drive rsync excludes from typst.toml + add leak assertion",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "883d1197d3ef2703e31992c608cf885c669217ef",
          "body": "Previous wording claimed \"out-of-range values render as 0\" — false.\nThe actual implementation (src/cv.typ:874-878) is:\n\n    for x in range(0, level) { /* filled */ }\n    for x in range(level, 5) { /* empty */ }\n\n`level: 7` renders 7 filled circles (not 0); `level: -1` renders 0\nfilled + 6 empty. No \n[…]\noes not clamp, so\nnobody copies a `level: 50` and is surprised by 50 circles spanning\nthe page.\n\nCaught by Codex stop-time review.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(docs): drop nonexistent clamping claim for cv-skill-with-level",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3c8b2635cc7f4a8f96eb3e405a741b9d725a23f5",
          "body": "components.md previously had only code blocks; users had to compile\nthe package to see what each cv-* function produces. Now every example\nsits next to its actual rendered PNG, pulled from the test suite.\n\nSource: tests/components/<name>/ref/1.png — the same images tytanic\nuses as visual-regression \n[…]\nfied: `mkdocs build --strict` passes; 13 image references in the\nrendered HTML; all PNGs land in docs/web/site/assets/components/.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(components): show rendered output beside every cv-* example",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1e21d618c949e4dfb59d0ad84d125fc69d6e9ec5",
          "body": "Both files were silently included in the package payload that ships to\ntypst/packages (via the upcoming v4.0.0 release PR). Neither is useful\nto package consumers:\n\n  CLAUDE.md       internal AI agent instructions; reading them out of\n                  context is noise to a regular user\n  CONTRIBUTI\n[…]\nature\n                           — bootstrapped to user via `typst init`)\n\nare the only PNGs left in the payload, all intentional.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(typst): exclude CLAUDE.md + CONTRIBUTING.md from Universe payload",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "843c99390358781f5cf1e125dc53a93e7b92931c",
          "body": "Codex stop-hook caught: documentation.yaml still called\n`python docs/web/generate-configuration.py`. The script was deleted\nin c00e77f when configuration.md switched to a pymdownx.snippets\nlive-include of template/profile_en/metadata.toml. The workflow\nwould have failed on the next push to main.\n\nAl\n[…]\nest has python3 by default;\n     `python` is symlinked but distro-dependent).\n\n  3. Bumped setup-uv from v4 to v6 (current major).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(docs): drop deleted generate-configuration.py + add glightbox",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0b6bed485ef453e873c3a20c08b1b360efa45342",
          "body": "mkdocs.yml: turns on the mkdocs-material features that pull weight\nwithout bloat:\n\n  navigation.tabs        Top-level grouping (User Guide / Reference /\n                         Migration & FAQ) renders as tabs in the\n                         header — much more discoverable than the\n                \n[…]\nng\na project pyproject.\n\nVerified: `mkdocs build --strict` passes; cards grid HTML present;\nglightbox markup wraps gallery images.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: enable mkdocs-material UX features + cards grid landing page",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3f57721769ea51fc8bb87865c0d0fa7aab74831b",
          "body": "The Configuration Reference was auto-generated by\ngenerate-configuration.py (312 lines of Python that parsed\ntemplate/profile_en/metadata.toml and rendered structured per-section\ntables). It worked but had drift risk: every metadata.toml change\nneeded a follow-up `just docs-generate` invocation to u\n[…]\nly `python3` from Homebrew).\n\nVerified: `mkdocs build --strict` passes, configuration page renders\nthe live metadata.toml content.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(configuration): live-include metadata.toml via pymdownx.snippets",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d039f73ba76da53119f2a71dd83bbf7c7f46c3ec",
          "body": "…vice\n\nStep 5 showed a code block with no instruction on where to put it —\nnew users would copy it, hit \"where does this go?\", and try cv.typ\nor metadata.toml (both wrong). Adds an explicit \"Open\nprofile_en/education.typ and replace its contents with:\" sentence.\n\nAlso adds a paragraph explaining the\n[…]\nullets: linked typstyle and typos to upstream,\nand recommended `git tag` for CV versioning (a real practice some\nmaintainers use).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(getting-started): clarify which file to edit + replace editor ad…",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4e7a88195b589ddafe618292d0c39b65f822dccd",
          "body": "…& FAQ\n\nOld nav was 8 pages flat in the sidebar — Configuration (270 lines of\nauto-generated reference) sat between Recipes and Troubleshooting,\nmaking it look like part of the user-guide reading order. New users\nwere being pushed into encyclopedic field-by-field reference before\nthey'd hit the use-\n[…]\ntion & FAQ\n    Migration Guide   — v1/v2/v3 -> v4\n    Troubleshooting   — common errors\n\nVerified: `mkdocs build --strict` passes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(mkdocs): reorganize nav into User Guide / Reference / Migration …",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5109beefdbac14c00856cf1749d157f4bee99630",
          "body": "README.md / index.md \"Multilingual Support — Seamlessly switch between\nlanguages (...) with a single config change\" was v3 wording. v4 doesn't\nswitch via a `language` config field; it switches via `--input profile=fr`\nat compile time. Users reading the old copy would look for a language\nfield, find \n[…]\n ([layout.fonts], [layout.section], display_name,\n  per-icon order in [personal.info]).\n\nVerified: `mkdocs build --strict` passes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: fix v4 marketing copy + add README badges + v4 callout",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "29883e5cd0464e31dc6de6a300799dd47d5ec888",
          "body": "components.md:\n  cv-section example used `highlighted: false` and `letters: 4` —\n  v3 parameter names that don't exist in v4. Users copying the\n  example would hit \"unknown parameter\" errors. Replaced with v4\n  parameters (`highlight: \"first-letters\" | \"full\" | \"none\"` and\n  `highlight_letters: int`\n[…]\nce Sans 3\", \"Heiti SC\"]`) plus\n  the `[personal] display_name` override for the header.\n\nVerified: `mkdocs build --strict` passes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(web): scrub v3-isms in components, recipes, troubleshooting",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1c525659153a69bf3981f4f268cf82174102d9f4",
          "body": "The PDF reference (docs/pdf/docs.typ) had stale v3 references in\nmultiple places that would have shipped with v4.0.0:\n\n  Section 3 (Step 3 / Step 4):\n    \"language code matching your profile_<name>/ folder\" —\n    `language` was removed in v4.\n\n  Section 4 (cv-section):\n    `#cv-section(\"Skills\", hig\n[…]\nh already\n    covers v3->v4 panic-with-migration messages.\n\nVerified: docs.typ builds clean (477 KB output) inside the test image.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(pdf): scrub v3-isms + auto-include profile_en/metadata.toml",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "25aca84cd21231b932045a99c682a436a05e3e8d",
          "body": "Pure cosmetic — typstyle 0.14.4 wraps the if-else onto multiple lines\nwhen the body crosses the 80-col budget.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(styles): apply typstyle wrapping to _resolve-accent-color body",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1d0a3608ddb65c43004aa8718185526d5ab641f0",
          "body": "Three component entry points (cv-section, _prepare-entry-params,\ncv-honor) all repeated the same pattern:\n\n    let accent-color = if color != none { color }\n                       else { _set-accent-color(awesome-colors, metadata) }\n\nThe conditional encodes \"honor explicit override before falling ba\n[…]\n_cv-header` keeps calling `_set-accent-color` directly because it\ndoesn't have a `color:` override parameter — no fallback needed.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(cv): extract _resolve-accent-color helper",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d3a414fbc376f304a89d33674460975651d1e138",
          "body": "The helper at src/cv.typ:43 was called once (cv-section, line 380) and\nsix other call sites used `eval(metadata.layout.at(key, default: ...))`\ninline. The abstraction wasn't pulling its weight — inline reads as\nclearly as the wrapper.\n\nAlso fixes a latent bug: the original call passed `1pt` (length)\n[…]\nat`), not anything specific\nto this package; inlining made them obsolete.\n\nTest count: 32 -> 30 tytanic. 10 panic tests unchanged.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(cv): inline single-use _get-layout-value",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e215759ff89851b4e757bed3c89a590f063c5805",
          "body": "v2 inject schema guard was duplicated character-for-character across:\n  - src/lib.typ:155-167 (letter() entry)\n  - src/cv.typ:215-225 (_cv-header internals)\n\nBoth checks fire on the same metadata.inject keys; cv() reached the\ncheck via _cv-header, letter() inlined it. New helper\n`_check-v2-inject-le\n[…]\n10 panic tests pass (including the\nv2-inject-ai-prompt-cv / v2-inject-keywords-cv panic fixtures, which\nexercise this exact path).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(lib): hoist _check-v2-inject-legacy out of cv-header",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4bda3f9dd399875c12dcc08bb2c2367c782b0c6e",
          "body": "cv() and letter() shared ~30 LOC of preamble (font resolution, font-size\neval, paper-size lookup, margin if/else) almost character-for-character\nidentical. Extract two pure helpers:\n\n  _resolve-typography(metadata) -> (regular-fonts, header-font, font-size)\n  _page-margin(paper-size, letter-style: f\n[…]\nn count drops from 2× to 1× and intent is cleaner.\n\nVerified: 32 tytanic + 10 panic tests pass with max-delta=1, max-deviations=0.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(lib): extract _resolve-typography + _page-margin; kebab rename",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3c0997a2ccd6a0903fd9ac346711e508d1839579",
          "body": "tests/README.md:\n  - Open with the Docker rationale (one source of truth, pixel-\n    deterministic across OSes) and the new tolerance (max-delta=1).\n  - Update layout: Dockerfile + docker-entrypoint.sh now live in tests/.\n  - \"Why Docker?\" subsection explaining the two alternatives we rejected\n    (\n[…]\n\n  - Same realignment — no more \"skip-annotated\" CJK note. Docker is\n    the routine path, native is only for the fast inner loop.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: document the Docker-baseline test workflow",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a82772e5d25411c5991e3f46e77242ff5d5a4ada",
          "body": "Cuts over the entire visual-regression flow to run inside the new test\nimage. With CI Linux and maintainer macOS rendering through the same\ncontainer, refs become pixel-deterministic and the tolerance hack\n(max-delta=50, max-deviations=50000 — 25× looser than ideal) goes away.\n\nAtomic switch — if an\n[…]\ntests pass with\nmax-delta=1, max-deviations=0. Regenerating refs inside Docker on\nmacOS produces the same bytes as a fresh CI run.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: switch to Linux Docker baseline",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "289e8abf3afd93afac9e876920914e8172c53ae5",
          "body": "Adds tests/Dockerfile + tests/docker-entrypoint.sh that pin a single\ntest environment for both maintainer machines and CI:\n\n  - Ubuntu 24.04, x86_64 (forces linux/amd64 even when run from arm64)\n  - typst 0.14.2 (>= manifest min)\n  - tytanic 0.3.3 + typstyle 0.14.4 (matches .pre-commit-config.yaml p\n[…]\ndeterministic\nacross maintainer macOS and CI Linux — tolerance tightens to\nmax-delta=1, max-deviations=0 (perfect match required).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(test): add Linux Docker test image",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a4287eb69f034205c32115a5a6bfccfd0d4f86e",
          "body": "Previous attempt used `uv tool install typstyle==0.14.4` — uv only\nresolves PyPI, but typstyle is a Rust crate. The install step failed\nwith \"typstyle was not found in the package registry\".\n\nUse taiki-e/install-action@v2 which fetches a prebuilt binary from\nGitHub releases (no compile, ~2s install). Same action we use for\ntytanic in the step above.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: install typstyle via cargo-binstall, not uv",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fc9242826888bd7aa2b67a80816655a45a948090",
          "body": "Maintainer's macOS and CI Linux render text-heavy A4 pages with enough\nantialiasing differences that the previous tolerance budget\n(max-delta=10, max-deviations=2000) blew on every full-profile regression\ntest. Component refs at 12cm wide / ~150 px tall stayed inside budget\nbecause they have far les\n[…]\ntrip the gate.\n\nIf a future test needs tighter tolerance, the per-test annotation\n/// [max-deviations(<n>)] overrides the default.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(test): loosen tytanic tolerance for cross-OS regression refs",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6677345a7c5bce7da194f18e2398552648e4f70c",
          "body": "First CI run still failed: 6 tests broke because @preview/fontawesome:0.6.0\nexpects \"Font Awesome 7 Free Solid\" / \"Brands\" family names, but apt's\nfonts-font-awesome package is older (FA 6) with apt-suffixed family\nnames that typst's font matcher rejects. The same applies to\nfonts-linuxlibertine — t\n[…]\ne standard\nHomebrew cask, so the diff between local and CI rendering is now\nlimited to subpixel jitter (absorbed by max-delta=10).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: install Font Awesome 7 directly + drop apt's fonts-font-awesome",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "af6851ebe7c9ac2d065c44358969e91ce022143d",
          "body": "Previous URL `source-sans-3VFs.zip` was a typo guess; doesn't exist on\nthe Adobe releases page. CI font-install step exited 22 (curl --fail on\nHTTP 404). Verified correct asset name via the GitHub releases API.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: fix Source Sans 3 download URL (OTF-source-sans-3.052R.zip)",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "95e8f8be699bf5c7d303d212cd091d64bba2b509",
          "body": "Universe ships everything in the package directory by default; only the\nexisting exclude entries (docs, .pre-commit-config.yaml, .gitignore) are\nsuppressed. Adding tests/ keeps ~2 MB of ref PNGs out of the published\ntarball (users have no reason to install our test suite). justfile and\n.github are dev-only artifacts that similarly shouldn't ship.\n\nNo functional change for users — `template/` is still the package payload.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(typst): exclude tests/, justfile, and .github from package payload",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2f2d3be512e46ee35ec7d9a59523e3f5c2a206a6",
          "body": "CONTRIBUTING.md:\n  - Add tytanic, typstyle, bash to local-dev prerequisites with\n    install hints and version pins (tytanic >= 0.3 because 0.2.x\n    bundles typst 0.13 and won't load this package).\n  - Add tests/ to the repo-layout section.\n  - Replace the stale \"just build / just dev / just reset\"\n[…]\nskip strategy.\n  - Update the docs-generation note to point at profile_en/metadata.toml\n    (the new canonical reference profile).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: document the v4 test suite + refresh stale CLAUDE.md sections",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "47b4ff5ff69ad2626e3cbcf4e319736b7e185144",
          "body": "Wires the v4 test suite into GitHub Actions on every PR + push to main.\n\nPipeline:\n  1. setup-typst@v3 with typst version pinned from typst.toml manifest\n  2. Install Source Sans 3 + Roboto + Linux Libertine + FontAwesome 6\n     (Heiti SC intentionally excluded — see CJK strategy in tests/README.md)\n[…]\nnors.\n\nAlso tightens two `just` recipe descriptions that were wrapping onto\nmultiple lines and getting truncated by `just --list`.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci: add test.yml — tytanic + panic smoke + typstyle gate",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e67001cc0eb13c84961dfd83ebfd605143acc70c",
          "body": "Wires up the new test suite and code-quality gate as first-class just\nrecipes. Old `compare` / `compare-build` recipes get a deprecation banner\nbut stay available for one release as a fallback.\n\nTest recipes (require tytanic >= 0.3, `just link`):\n  just test               full suite — tytanic + pani\n[…]\npend on `just link` so the `@preview/brilliant-cv:4.0.0`\nimports inside `template/profile_*/` modules resolve to the local source.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(justfile): add test + fmt recipes; deprecate compare",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3ad9f834d95d530fa24234c287bbed66bb2930e0",
          "body": "Prior commit 32c0f15 fixed the helper but skirted the line-length budget;\ntypstyle 0.14.4 wraps the two `.at(..., default: ...)` calls onto multiple\nlines. Pure cosmetic — verified via `just build`.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(styles): apply typstyle wrapping to overwrite-fonts",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "be31749eb52893f85499f9202bc16e664119cdc4",
          "body": "Adds 7 tytanic persistent tests rendering each shipped profile end-to-end.\nCatches layout regressions across locales, mixed-script profiles, and\nthe cover-letter entry point.\n\nCV regression (5 profiles):\n  regression/cv-en       English (canonical reference profile)\n  regression/cv-fr       French\n \n[…]\n: tytanic >= 0.3.0 (bundles typst 0.14, matching our manifest).\n0.2.x bundles typst 0.13 and rejects compiler = \"0.14.0\" packages.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(regression): full-profile snapshots for all 5 locales + 2 letters",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b52e510e437c2e4071077da8eea378fd53825ffa",
          "body": "Adds 14 tytanic persistent tests, one per public component variant we\ncare about. Each renders the component in isolation with a tight page\nsize (12-16 cm wide, height: auto) and compares against a committed\nreference PNG.\n\ncv-section (4 variants, exercises [layout.section]):\n  cv-section-first-lett\n[…]\n44 dpi. Run the full set via\n`tt run --use-system-fonts -e 'glob:\"components/*\"'` (the upcoming\n`just test` recipe wires this up).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(components): visual fixtures for every public cv-* renderer",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5a07e10efa8c225723d7fe0798040e1fda8ccda6",
          "body": "Adds 10 tytanic compile-only tests for the package's pure helpers, plus\na .gitignore rule for tytanic's ephemeral `tests/**/out/` and `diff/`\ndirectories.\n\nassertion-style tests:\n  units/set-accent-color-named           — preset palette key resolution\n  units/set-accent-color-hex             — hex-s\n[…]\ncaught a latent bug in overwrite-fonts (fixed in\nthe previous commit). Run via `tt run units/` or the upcoming\n`just test` recipe.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(units): cover pure helpers in src/utils + src/cv.typ",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c9c6dc79b45780d0e8ff206f0928cd3051351057",
          "body": "….fonts]\n\nSurfaced by the new unit-test suite: calling overwrite-fonts with metadata\nthat lacks `[layout.fonts]` previously panicked with `element sequence has\nno method 'len'`. Root cause was `default: []` (an empty content block)\nfed to `.len()` — typst content has no `len()`. Every shipped profil\n[…]\nes — all 5 in template/ set both\nfields. Strictly broadens the contract for users who write minimal\nmetadata or partial overrides.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(styles): make overwrite-fonts safe with absent or partial [layout…",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1a4699448d4c93b1cae4f359f09820f4eb437f83",
          "body": "Missed by the typstyle pre-commit hook during the previous commit.\nPure cosmetic — wraps a long `cv.with(...)` call onto multiple lines.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): apply typstyle to v3-lang-table fixture",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2460add7ad015eae6298d494d0f11ac360569800",
          "body": "Adds 10 shell-script smoke tests covering every panic point in v4's\nbackward-compat layer:\n\n  v3 schema removals (src/lib.typ:_check-v3-legacy):\n    - language        (typography shortcut, lib.typ:24)\n    - non_latin_font  (lib.typ:34)\n    - non_latin_name  (lib.typ:42)\n    - [lang.<code>]   (lib.ty\n[…]\ning match\n\n`fixture.typ` is not literally `test.typ`, so tytanic ignores these\nfiles entirely (`tt list` confirms an empty suite).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(panics): assert all v3/v2 schema migration panics",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eeb710a951317b78ecb4698cd394d90300fb7363",
          "body": "Lays the foundation for the v4 test suite without adding any tests yet:\n\n- typst.toml: configure [tool.tytanic] with cross-platform pixel tolerance\n  (max-delta=10, max-deviations=2000, ~0.14% of an A4 144-dpi page) to\n  absorb freetype/harfbuzz jitter between maintainer macOS and CI Linux.\n- tests/\n[…]\nd\n  the CJK-profile skip strategy.\n\nSubsequent commits add the actual tests (panics, units, components,\nregression) and CI wiring.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: add tytanic scaffold and shared fixtures",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "091397ad1db8d8a7b5c9738a1119bf0882d7942a",
          "body": "Pre-commit pin lagged at 0.11.29 (released over a year ago); upstream\nmoved to typstyle-rs/typstyle and the 0.14 line. Bumps the hook + repo\nURL and applies the resulting format pass to src/ + template/.\n\nPure cosmetic diff (block-comment indent, wide-call wrapping, alphabetical\nimport sort). Build verified via `just build`. Locks the formatted state\nahead of adding `typstyle --check` to CI.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(typstyle): bump to 0.14.4 and apply format pass",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "347b34883572ea0cd40b0793a5306fe11c2eaae8",
          "body": "…gent references\n\nSigned-off-by: yunanwg <77310871+yunanwg@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor(docs): reorganize project instructions and remove outdated a…",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70087bf79cbf58974909c6d7b4fe5826a4ba02f3",
          "body": "Previous commit (e9abd4d) deleted the `\"lang\": { ... }` property block\nfrom the schema but left the trailing comma after the `\"personal\"` block\nthat used to separate the two. Result was invalid JSON:\n\n  json.decoder.JSONDecodeError: Illegal trailing comma before end of object:\n  line 253 column 6\n\nE\n[…]\ns the schema (e.g. for documentation generation) would fail.\n\nTrims the comma so the file parses again. Verified with `json.load`.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(schema): remove trailing comma left over from `lang` table deletion",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0deead135ef42bd78bc7354f42852d61b0248187",
          "body": "…llback\n\nv4 supported three backward-compat patterns: (A) panic-with-migration-\nmessage, used since v3 for `inject_ai_prompt`/`inject_keywords`;\n(B) silent fallback, used briefly for v3 typography fields; and\n(C) full removal, used for renamed parameter/function aliases.\n\nPattern B was a regression \n[…]\n_latin_name + [lang.zh] + [lang.non_latin]) panics on first read\n  with the expected migration message — no silent fallback fires.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(api, schema): panic on v3 legacy fields instead of silent fa…",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "67f9986e66c03fd35aa06fc25c59cbb84ecd6c4b",
          "body": "The previous commit (eb95738) marked `language` deprecated in its\ndescription but left it in the top-level `required` array. v4 profile\nmetadata.toml files no longer ship a `language` field, so any\neditor running schema validation against the shipped profiles\n(profile_en, fr, de, it, zh) reports a m\n[…]\nist so v4 profiles validate cleanly\nwhile v3 metadata.toml files continue to work (the field is still\nallowed, just not required).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(schema): drop `language` from top-level required",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "abcd5da67a1bdcb4d0ba14c63627c76360725bcd",
          "body": "- migration.md: new \"Typography is now explicit\" subsection mapping\n  the four implicit v3 effects of `language=zh` to their explicit v4\n  equivalents (`[layout.fonts]`, `[layout.section] title_highlight`,\n  `[personal] display_name`, `[layout] date_width`). Notes that\n  `_is-non-latin()` is gone, s\n[…]\n metadata defaults documented inline). configuration.md picks up the\n  new `[layout.section]` table from profile_en/metadata.toml.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: document the explicit-typography model (no language whitelist)",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d2e3d014f38c3e151ee69f0eba2567d2ae3a31a0",
          "body": "…hy schema\n\nRemoves the v3 `language` / `non_latin_font` / `non_latin_name` fields\nfrom the shipped profile templates and replaces them with the explicit\nv4 typography fields. Every locale-specific decision is now visible in\nthe profile's metadata.toml.\n\nPer-profile changes:\n- profile_en, profile_de\n[…]\ndd the `[layout.section]` table with `title_highlight` enum\n  (first-letters | full | none) and integer `title_highlight_letters`.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(template, schema): align profiles with the explicit-typograp…",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "35a44ce27d057e4cc2370df5107d7dffea0f0d0a",
          "body": "In v3 the `language` field was a shortcut that secretly drove four\ntypography decisions: which font got pushed onto the fallback chain,\nwhether the section title was split into \"first-N + rest\", whether\n`non_latin_name` replaced the first/last split, and the default date\ncolumn width. v4 removes tha\n[…]\nja\", \"ko\", \"ru\") and the new explicit fields are\nabsent. v3 users can do a bare version bump without touching their\nmetadata.toml.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(api): drop the language abstraction; typography is now explicit",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ae5d36f66838260a582a96b687746c92b58a96d5",
          "body": "Last commit (d3589ad) put the bare phrase\n`profile_<name>/metadata.toml` inside the Section 6 heading. In Typst\nunquoted text, `<...>` is label syntax, so the heading was parsed as\nan unclosed label literal:\n\n  error: unclosed delimiter\n    ┌─ docs/pdf/docs.typ:279:39\n    │\n  279 │ == 6. Configurati\n[…]\narses it as a raw string, sidestepping the label syntax). Verified\nwith `typst compile --root . docs/pdf/docs.typ` — builds clean.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(docs-pdf): wrap profile_<name>/metadata.toml in backticks",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6c058994820debde5e9d29edb53989ae4af07eb3",
          "body": "The Section 6 Configuration Reference heading and its preamble still\ncalled the file \"metadata.toml\" (singular, root-style) and showed an\nexample labelled \"Here is an example of a root metadata.toml file\".\nBoth were left over from the v3 / deep-merge wording. Updates them to\npoint at profile_<name>/metadata.toml and to reinforce that each\nprofile is self-contained. The Step 4 heading is also retitled.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(pdf): finish removing root metadata.toml references",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d378e1f01ac701d6493d2dbbc2e9d99d08c8ef15",
          "body": "The PDF documentation's File Structure Map and Configure step still\ndescribed `profile_<name>/metadata.toml` as \"sparse per-profile\noverrides\" on top of a shared root, language from the deep-merge\ndraft of v4. Updates the wording to match the shipped architecture:\neach profile is a self-contained complete configuration.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(pdf): fix stale root-metadata wording in offline reference",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d34094dc499281c4fc2ec74c9236c4798b853780",
          "body": "Follows the source pivot to one-profile-per-metadata.toml (no root, no\ndeep-merge). Updates every user- and contributor-facing surface:\n\n- migration.md: rewrites the v3 -> v4 upgrade path. Replaces the\n  deep-merge instructions with \"one profile = one self-contained\n  metadata.toml\" and adds a Desig\n[…]\nreplaces v3's [lang.<code>]\"\n  remarks from descriptions — these are now the primary form, not a\n  v4 addition over a v3 baseline.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: align documentation with profile-only architecture",
          "author_name": "yunanwg",
          "author_login": "yunanwg",
          "committed_at": "2026-04-29T19:55:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 26,
      "commits_last_year": 206,
      "latest_release_at": "2026-07-19T09:45:59Z",
      "latest_release_tag": "v4.1.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 17,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 26.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 101,
      "stars": 812,
      "watchers": 3,
      "fork_history": {
        "days": [
          {
            "date": "2023-06-11",
            "count": 1
          },
          {
            "date": "2023-07-09",
            "count": 1
          },
          {
            "date": "2023-07-12",
            "count": 1
          },
          {
            "date": "2023-11-03",
            "count": 1
          },
          {
            "date": "2023-12-14",
            "count": 1
          },
          {
            "date": "2023-12-20",
            "count": 1
          },
          {
            "date": "2024-01-28",
            "count": 1
          },
          {
            "date": "2024-02-05",
            "count": 1
          },
          {
            "date": "2024-03-09",
            "count": 1
          },
          {
            "date": "2024-03-13",
            "count": 1
          },
          {
            "date": "2024-03-23",
            "count": 1
          },
          {
            "date": "2024-06-18",
            "count": 1
          },
          {
            "date": "2024-07-01",
            "count": 1
          },
          {
            "date": "2024-07-21",
            "count": 1
          },
          {
            "date": "2024-07-29",
            "count": 1
          },
          {
            "date": "2024-07-31",
            "count": 1
          },
          {
            "date": "2024-08-27",
            "count": 1
          },
          {
            "date": "2024-09-17",
            "count": 1
          },
          {
            "date": "2024-09-24",
            "count": 1
          },
          {
            "date": "2024-10-09",
            "count": 1
          },
          {
            "date": "2024-10-12",
            "count": 2
          },
          {
            "date": "2024-10-22",
            "count": 1
          },
          {
            "date": "2024-10-27",
            "count": 1
          },
          {
            "date": "2024-10-29",
            "count": 1
          },
          {
            "date": "2024-11-15",
            "count": 1
          },
          {
            "date": "2024-12-15",
            "count": 1
          },
          {
            "date": "2024-12-19",
            "count": 1
          },
          {
            "date": "2024-12-21",
            "count": 1
          },
          {
            "date": "2024-12-22",
            "count": 1
          },
          {
            "date": "2025-01-16",
            "count": 1
          },
          {
            "date": "2025-01-25",
            "count": 1
          },
          {
            "date": "2025-02-04",
            "count": 1
          },
          {
            "date": "2025-02-08",
            "count": 1
          },
          {
            "date": "2025-02-09",
            "count": 1
          },
          {
            "date": "2025-02-13",
            "count": 1
          },
          {
            "date": "2025-02-23",
            "count": 1
          },
          {
            "date": "2025-03-16",
            "count": 1
          },
          {
            "date": "2025-04-07",
            "count": 1
          },
          {
            "date": "2025-04-30",
            "count": 1
          },
          {
            "date": "2025-05-04",
            "count": 1
          },
          {
            "date": "2025-05-30",
            "count": 1
          },
          {
            "date": "2025-07-02",
            "count": 1
          },
          {
            "date": "2025-07-04",
            "count": 1
          },
          {
            "date": "2025-07-19",
            "count": 1
          },
          {
            "date": "2025-07-21",
            "count": 1
          },
          {
            "date": "2025-08-01",
            "count": 1
          },
          {
            "date": "2025-08-03",
            "count": 1
          },
          {
            "date": "2025-08-15",
            "count": 1
          },
          {
            "date": "2025-08-21",
            "count": 1
          },
          {
            "date": "2025-08-24",
            "count": 1
          },
          {
            "date": "2025-09-14",
            "count": 1
          },
          {
            "date": "2025-09-20",
            "count": 1
          },
          {
            "date": "2025-10-05",
            "count": 1
          },
          {
            "date": "2025-10-12",
            "count": 1
          },
          {
            "date": "2025-10-22",
            "count": 1
          },
          {
            "date": "2025-11-06",
            "count": 1
          },
          {
            "date": "2025-11-07",
            "count": 1
          },
          {
            "date": "2025-11-09",
            "count": 1
          },
          {
            "date": "2025-11-12",
            "count": 1
          },
          {
            "date": "2025-11-14",
            "count": 1
          },
          {
            "date": "2025-11-17",
            "count": 1
          },
          {
            "date": "2025-11-20",
            "count": 1
          },
          {
            "date": "2025-11-28",
            "count": 1
          },
          {
            "date": "2025-12-02",
            "count": 2
          },
          {
            "date": "2025-12-14",
            "count": 1
          },
          {
            "date": "2025-12-16",
            "count": 1
          },
          {
            "date": "2025-12-23",
            "count": 1
          },
          {
            "date": "2025-12-24",
            "count": 1
          },
          {
            "date": "2025-12-27",
            "count": 1
          },
          {
            "date": "2026-01-05",
            "count": 1
          },
          {
            "date": "2026-01-08",
            "count": 1
          },
          {
            "date": "2026-01-11",
            "count": 1
          },
          {
            "date": "2026-01-16",
            "count": 1
          },
          {
            "date": "2026-01-30",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-05",
            "count": 1
          },
          {
            "date": "2026-02-09",
            "count": 1
          },
          {
            "date": "2026-02-13",
            "count": 1
          },
          {
            "date": "2026-02-16",
            "count": 1
          },
          {
            "date": "2026-02-25",
            "count": 1
          },
          {
            "date": "2026-03-01",
            "count": 1
          },
          {
            "date": "2026-03-13",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 2
          },
          {
            "date": "2026-03-21",
            "count": 1
          },
          {
            "date": "2026-03-24",
            "count": 1
          },
          {
            "date": "2026-03-26",
            "count": 1
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-09",
            "count": 1
          },
          {
            "date": "2026-05-05",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 2
          },
          {
            "date": "2026-05-17",
            "count": 1
          },
          {
            "date": "2026-05-24",
            "count": 1
          },
          {
            "date": "2026-05-26",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 1
          },
          {
            "date": "2026-07-20",
            "count": 2
          }
        ],
        "complete": true,
        "collected": 101,
        "total_forks": 101
      },
      "star_history": null,
      "open_issues_and_prs": 3
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "justfile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 15997,
      "source_files_sampled": 6,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        ".github/copilot-instructions.md",
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 4733
    },
    "dependencies": {
      "manifests": [
        "scripts/requirements-checks.txt"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 3,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "jsonschema",
            "direct": false,
            "version": "4.26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-glightbox",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "pypi"
          },
          {
            "name": "mkdocs-material",
            "direct": false,
            "version": "9.7.7",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 3,
        "direct_count": 0,
        "indirect_count": 3
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 3,
        "merged_prs": 120,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 99,
        "closed_unmerged_prs": 7
      },
      "bus_factor": 1,
      "bot_contributors": 3,
      "top_contributors": [
        {
          "type": "User",
          "login": "yunanwg",
          "commits": 307,
          "avatar_url": "https://avatars.githubusercontent.com/u/77310871?v=4"
        },
        {
          "type": "User",
          "login": "LeWimbes",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/12753781?v=4"
        },
        {
          "type": "User",
          "login": "SimonIT",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/11720038?v=4"
        },
        {
          "type": "User",
          "login": "ttlns",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/89038706?v=4"
        },
        {
          "type": "User",
          "login": "alberto-lazari",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/70653968?v=4"
        },
        {
          "type": "User",
          "login": "alexk101",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/56556451?v=4"
        },
        {
          "type": "User",
          "login": "bradarnold",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/6722831?v=4"
        },
        {
          "type": "User",
          "login": "zzamboni",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/32876?v=4"
        },
        {
          "type": "User",
          "login": "ericthomasca",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/2215838?v=4"
        },
        {
          "type": "User",
          "login": "MrSom3body",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/129101708?v=4"
        }
      ],
      "contributors_sampled": 21,
      "top_contributor_share": 0.919
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "claude-code-review.yml",
        "claude.yml",
        "compile.yaml",
        "documentation.yaml",
        "regen-refs.yaml",
        "release-and-publish.yaml",
        "sponsors.yaml",
        "test.yaml",
        "update-previews.yaml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [],
      "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": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/20 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 13 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 8,
            "reason": "dependency not pinned by hash detected -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "7772666e9848393932103830b8e71d8a7d695a2c",
        "ran_at": "2026-07-28T01:59:40Z",
        "aggregate_score": 6.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-27T11:21:57Z",
      "oldest_open_prs": [
        {
          "number": 188,
          "created_at": "2026-06-24T10:06:08Z",
          "last_comment_at": "2026-07-20T08:06:57Z",
          "last_comment_author": "danielschlaugies"
        },
        {
          "number": 234,
          "created_at": "2026-07-27T03:25:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 235,
          "created_at": "2026-07-27T03:25:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-27T11:20:00Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/yunanwg/brilliant-CV",
    "host": "github.com",
    "name": "brilliant-CV",
    "owner": "yunanwg"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 73,
      "inputs": {
        "security": 71,
        "vitality": 86,
        "community": 68,
        "governance": 52,
        "engineering": 92
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 86,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 206,
              "human_commit_share": 0.9,
              "days_since_last_push": 0,
              "active_weeks_last_year": 17
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "17/52 weeks with commits",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 17
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "206 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 206
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 26,
              "latest_release_tag": "v4.1.0",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 26.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "26 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 26
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~26.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 26.2
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 5,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 5 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 68,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "forks": 101,
              "stars": 812,
              "watchers": 3,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "812 stars",
                "points": 47.2,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 812
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "101 forks",
                "points": 16.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 101
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "3 watchers",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (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": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 52,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 30,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 21,
              "top_contributor_share": 0.919
            },
            "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 92% of commits",
                "points": 1.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 92
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "21 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "merged_prs": 120,
              "open_issues": 0,
              "closed_issues": 99,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 7
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "120/127 decided PRs merged",
                "points": 36.1,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 120,
                      "decided": 127
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/20 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": 48,
            "inputs": {
              "followers": 37,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "yunanwg",
              "public_repos": 6,
              "account_age_days": 2022
            },
            "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": "37 followers of yunanwg",
                "points": 11.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 37,
                      "login": "yunanwg"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "6 public repos, account ~5 yr old",
                "points": 17.2,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 6
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 5
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 92,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "9 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "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": 16,
                "status": "met",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "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": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "cv",
                "pdf",
                "typst",
                "typst-template",
                "resume",
                "resume-template",
                "prompt-injection"
              ],
              "has_wiki": false,
              "homepage": "https://typst.app/universe/package/brilliant-cv",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://typst.app/universe/package/brilliant-cv",
                "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": "7 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": "good",
        "name": "Security",
        "value": 71,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 64,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 6.4
            },
            "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 is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/20 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 13 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 8",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 3 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 3
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 3,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 3,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "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": 12
            },
            "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": 81,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                ".github/copilot-instructions.md",
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 4733
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".github/copilot-instructions.md, AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".github/copilot-instructions.md, 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": "90 of 90 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 90,
                      "sampled": 90
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 87,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "justfile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.63,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.1
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "justfile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "justfile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 11,
                "status": "met",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "63 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 63,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "10 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 10,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 8",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Typst",
              "largest_source_bytes": 15997,
              "source_files_sampled": 6,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Typst without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Typst"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/6 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 6,
                      "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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T02:00:05.607738Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/y/yunanwg/brilliant-CV.svg",
  "full_name": "yunanwg/brilliant-CV",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计.