项目实践

Resume

Resume 是一个 Astro 静态简历站点:本地完整构建用于打印与视觉检查,publish artifact 提供 value-free loading shell,再由 Edge Function 在访问验证后返回结构化简历内容与 PDF 能力(README.md、astro.config.mjs、src/data/resume.ts)。

  • Astro site
  • TypeScript web
  • Playwright e2e
  • Manual version release delivery
  • SemVer change governance
  • Quality gates
  • Release failure notification
  • EdgeOne Makers static-site deploy

目录

技术栈

运行与交付

CI 工作流
  • ci.yml
  • deploy.yml
  • e2e-full.yml
  • manual-release.yml
  • notify-release-failure.yml
  • release-completion.yml
  • release.yml
能力标记
  • github_actions
  • package_json
  • pnpm_lock
JSON

Purpose

Resume 是一个 Astro 静态简历站点:本地完整构建用于打印与视觉检查,publish artifact 提供 value-free loading shell,再由 Edge Function 在访问验证后返回结构化简历内容与 PDF 能力(README.md、astro.config.mjs、src/data/resume.ts)。本 snapshot 记录 checked-in 项目合同和可复用交付模式,不宣称已完成真实 production Release。

Taxonomy

  • Tags: Astro site, TypeScript web, Playwright e2e, Manual version release delivery, SemVer change governance, Quality gates, Release failure notification, EdgeOne Makers static-site deploy
  • Why / evidence: astro.config.mjs、package.json、playwright.config.ts、.github/quality-gates.json、.github/release-contract.json 与 .github/workflows/ 分别支撑站点、TypeScript/浏览器验证、质量门禁、手动版本交付、失败通知和 EdgeOne artifact 交付边界。

Repository map

  • src/ 保存 Astro 页面、组件、resume data、runtime renderer 与样式;edge-functions/ 保存受保护内容接口;public/ 保存静态资产;tests/ 保存 Vitest、发布合同和 Playwright 测试。
  • scripts/ 提供 publish build、PDF 生成/验证、隐私与资产审计;docs/specs/、docs/solutions/ 与 docs/adr/ 保存设计合同、实现记录和决策。
  • .github/release-contract.json 定义版本 grammar、identity refs、manual release 输入、artifact publication 与 recovery;.github/workflows/manual-release.yml、release-completion.yml、release.yml、deploy.yml 和 notify-release-failure.yml 分开准备、门禁、Release、Deploy 与通知阶段。

Runtime and delivery

本地开发使用 pnpm install 与 pnpm dev;完整站点可用 pnpm build,发布构建使用 pnpm build:publish,需要的联系字段通过 .env.example 约束。发布流程以 .github/release-contract.json 为合同,采用 workflow_dispatch、append-only reservation、VERSION-only verified preparation、exact-head merge 和显式 Release/Deploy handoff;这些是 checked-in workflow 设计,不是本 snapshot 对远端执行结果的声明。

Architecture notes

站点把页面内容维护在 src/data/resume.ts,由 Astro components 与 src/styles/resume.css 渲染;发布面先构建无内容的 shell,访问验证后由 edge-functions/api/resume.js 返回结构化 JSON,浏览器再通过 src/runtime/resume-renderer.js 展示内容(README.md)。

手动 release 的 identity 边界由 .github/release-contract.json、.github/scripts/release_chain.py 与 .github/workflows/manual-release.yml 共同实现。owner 未给出 exact version 时,ADR 规定 Agent 从当前 candidate 的 repository-local、base/source-bound、verified impact 选择同名 symbolic patch、minor 或 major;exact final/prerelease 仅来自 owner 的 exact input;历史、外部或 unresolved evidence 必须 fail closed(docs/adr/0015-agent-release-target-selection.md、.github/scripts/test-release-contract.py)。

Workflow and quality gates

.github/workflows/ci.yml 的 verify job 运行 lint、release contract、PDF、content、DOM、font、print、A4、E2E、publish、asset、privacy 和 runtime checks;package.json 记录对应的本地命令。.github/quality-gates.json 将 verify 声明为 required check,并把 branch protection 状态列为 owner-side repository-plan boundary。

.github/scripts/test-release-contract.py 覆盖 symbolic impact mapping、exact owner version、缺失或过期 candidate binding、外部/其他 checkout record、scope/classification 不一致与非法 evidence 的 fail-closed 行为。.github/workflows/notify-release-failure.yml 与 .github/release-failure-notification.json 只表达失败上下文与通知合同;本 snapshot 未验证任何真实通知、Release 或 Deploy run。

Reusable decisions

  • 将 SemVer impact classification 与 manual release target selection 分成两个边界:SemVer policy 只产出 verified patch/minor/major,manual consumer 决定是否把它作为 symbolic workflow input。
  • 将供 normal progression 消费的 impact record 保存在当前 repository,并绑定 candidate base_sha 与 source_sha;历史 record、缺少 binding、scope drift 或 classification unresolved 时不使用 fallback。
  • 将 owner-specified exact final/prerelease 与 symbolic progression 分成不同输入路径,并在 preparation provenance 中保留 target source。
  • 将 preparation、Release、Deploy、same-SHA recovery 和 failure notification 作为独立阶段,以 immutable identity 与单一 artifact 维持可审计边界。

Risks and open questions

  • 目标提交 3328a8d7ffe9cba2d7a5bc3b5114c3aaeef9f4a1 中的 docs/release/version-impact.json 是一个 feature impact record,但不含当前候选的 candidate binding;resolver 将这种历史/未绑定 record 拒绝为 normal progression 输入,后续候选必须生成新的本地绑定记录。
  • 可访问证据证明了 checked-in contract、resolver 和 tests,但没有证明真实 production GitHub Release、EdgeOne deployment、tag consumption 或 failure notification 已完成;本 snapshot 保持 medium confidence。
  • .github/quality-gates.json 记录了当前 private repository plan 下 GitHub required-check enforcement 的 owner-side 限制;是否改变仓库计划或可见性不属于本次 Playbook 写入范围。

Evidence index

  • README.md
  • package.json
  • astro.config.mjs
  • playwright.config.ts
  • src/data/resume.ts
  • src/runtime/resume-renderer.js
  • edge-functions/api/resume.js
  • .github/quality-gates.json
  • .github/release-contract.json
  • .github/release-failure-notification.json
  • .github/scripts/release_chain.py
  • .github/scripts/test-release-contract.py
  • .github/workflows/ci.yml
  • .github/workflows/manual-release.yml
  • .github/workflows/release-completion.yml
  • .github/workflows/release.yml
  • .github/workflows/deploy.yml
  • .github/workflows/notify-release-failure.yml
  • .agents/skills/semver-change-governance/SKILL.md
  • .agents/skills/semver-change-governance/assets/templates/version-impact-record.example.json
  • docs/adr/0015-agent-release-target-selection.md
  • docs/release/version-impact.json