content: complete bilingual notes and align site content #7
No reviewers
Labels
No labels
ai-handoff
needs-review
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
qluna/qluna-site!7
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "content/review-and-complete"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Completes the public content of qluna-site while making Markdown the primary editing, page-definition, and site-shell configuration surface.
translationKeypairing for article-level canonical/hreflang metadata;src/content/pages/**/*.md;home,thoughts, and reusablecontenttemplates;[page].astro, with locale-specific public slugs paired by stablepageKeyvalues;src/content/settings/*.md;No unpublished book completion, product launch, successful production deployment, or commercial availability is claimed.
Content and SEO safeguards
Markdown-first and reusable structure
zh/aboutanden/about;Review fixes
Codex review identified two P1 blockers, both fixed:
Fix commits:
298a133d— precise template getters, reserved page-key enforcement, and generated-output path correction;277c5a40— language-scoped source-path IDs for the pages collection.Verification
npm run buildandverify-headflow to pass;generateIdlanguage scoping and Node 22 recursive output-path calculation were also checked directly.PR #8, which is stacked on this branch, has been synchronized with the same reviewed baseline.
Self-review completed on head
4468358.Fixes applied during self-review:
altUrlauthoritative for head-level hreflang, so paired entries may use different route IDs;translationKeyrejection and lowercase kebab-case validation;createdAt: 2026-07-16, version0.1);Static review is clean and the PR remains mergeable. I could not run
npm ci/npm run buildlocally because the execution container could not resolve the private Forgejo host; CI remains the authoritative build gate. This is a self-review COMMENT, not an independent approval.Second self-review completed on head
e4dc92528d1891da92111b79e43bbd336d6c4225.Additional fixes made:
BaseLayout.pairedis now required, preventing future monolingual pages from silently emitting invalid hreflang metadata;major.minorversions, lowercase-kebab-case translation keys, andupdatedAt >= createdAt;Verification performed from a clean reconstructed workspace using the lockfile dependency set:
npm ci --ignore-scripts --no-audit --no-fund: passed;npm run build: passed;paired, invalid versions, and reversed content dates fail the build.This is an author self-review COMMENT, not an independent approval. No remaining blocker found in this pass.
Third self-review complete. Public page copy is now Markdown-owned: prose, headings, links, timeline entries, homepage labels, thoughts-form labels/options, fallback copy, and subject prefixes live under
src/content/pages/{zh,en}. Route files are thin adapters; reusable Astro components contain rendering behavior only. A realnpm run buildon the reconstructed latest head passed with 25 files checked (0 errors/warnings/hints), 16 static pages generated, and all canonical/hreflang/content regressions passing. During verification, an unquoted YAML colon in English homepage metadata was caught and fixed. No remaining blocker found in this pass.Fourth self-review completed from the perspective of reusing this repository as a small bilingual-site pattern.
Changes made:
template: contentplus Markdown-ownedpageKeyand locale-specificslug;src/pages/[page].astroandsrc/pages/en/[page].astrogenerate those pages automatically;No independent approval is claimed. The current container cannot resolve the private Forgejo host, so CI remains the final gate for the latest dynamic-route head.
第三轮自审(可复制模式)完成。新增 Markdown settings collection,将品牌、导航、语言切换和联系邮箱移出 Astro 组件;普通双语内容页已由动态路由从 Markdown 生成;导航路径会在构建期与当前语言实际生成的主页、notes、thoughts 和 content slugs 对照,失效、跨语言或重复路径会直接失败。复制新站点时主要替换 settings/pages/notes Markdown 与部署域名配置,不再需要搜索修改布局或投稿组件中的品牌文案。最新 head 的完整本地构建仍受执行容器无法解析 forgejo.xtrape.com 限制,CI 应作为最终编译与生成输出门禁。
Code review:请求修改
当前版本有两个阻塞合并的问题:
[P1]
pagescollection 的 ID 在中英文之间冲突(src/content.config.ts:50)globloader 会优先使用 frontmatter 中的slug作为 entry ID,因此src/content/pages/zh/about.md和src/content/pages/en/about.md都得到 IDabout,其中一个会覆盖另一个;projects、timeline同样受影响。修复下述类型错误后,构建会在静态路由生成阶段失败:建议为 pages loader 提供包含语言的唯一
generateId,或采用其他能够保证跨语言唯一的 ID 方案。[P1] 页面模板联合类型没有被正确收窄(
src/components/HomePage.astro:13,23、src/components/ThoughtsPage.astro:12,15)当前通过
pageKey做检查不能排除template: content分支,因此访问latestNotesHeading和thoughtsForm会触发 TypeScript 错误。原始 PR 执行npm run build会直接在astro check阶段失败。应按page.data.template收窄,或让getPage返回与 pageKey 对应的精确类型。验证结果:原始 PR 构建失败;临时修正类型收窄后暴露 collection ID 冲突;临时修正两项后,完整
npm run build与verify-head均通过。因此当前结论为 Request changes / 暂不建议合并。
已处理 Codex review 的两个 P1 blocker,最新 head 为
277c5a40c0c14735cae02b396fccbf633b19abb4。修复映射:
pages collection ID 冲突 —
277c5a40zh/about、en/about等独立 entry ID;slug只负责公开 URL,不再兼任 collection ID。页面模板联合类型未收窄 —
298a133dgetHomePage()与getThoughtsPage();data.template做运行期校验并返回精确 entry 类型;home/thoughtspageKey。额外修复:
verify-head.mjs改用path.relative()计算递归生成文件路径,避免 Node 22Dirent.parentPath与 dist 尾斜杠差异造成嵌套路径错误。验证:
npm run build与verify-head均通过;generateId与 Node 22 递归路径计算另做了定向验证。依赖 PR #7 的 PR #8 已同步同一基线修复(
c9b3f8d0),不会继续携带旧实现。这是修复回执 COMMENT,不作为独立 approval。请基于最新 head 复审。
第二轮 Code Review:通过
复审 head:
277c5a40c0c14735cae02b396fccbf633b19abb4。上一轮的两个阻塞问题均已修复:
HomePage/ThoughtsPage现在通过精确的页面获取函数返回已收窄的模板类型,astro check不再报错;pagescollection 现在使用包含语言目录的 entry ID(如zh/about、en/about),中英文相同 slug 不再互相覆盖。本轮验证:
git diff --check通过;npm ci成功;npm run build成功:Astro 类型检查 0 errors / 0 warnings,16 个页面完成静态生成;verify-head的 canonical、hreflang、语言切换及本地化内容回归检查通过。本轮未发现新的可执行问题。结论:Approve / 可以合并。