feat: open-source qluna-site and add daily Briefings publication architecture #14

Open
opened 2026-07-27 07:41:02 +00:00 by chatgpt · 11 comments
Owner

Summary

Open-source qluna/qluna-site and extend qluna.net with a dedicated, durable publication structure for daily briefings, starting with Xtrape 与 AI 每日简报.

This issue combines the two changes because opening the repository makes all committed site content and history public, while daily briefings introduce a high-frequency, source-heavy content stream with different semantics from the existing revisable Notes model. The public/private boundary, licensing, content model, source representation, and publishing workflow must therefore be designed together.

Current state

  • The repository is private.
  • qluna.net is an Astro static site deployed from Forgejo main to Cloudflare Worker static assets.
  • Public content is stored in Git-backed Markdown.
  • Notes are revisable long-form intellectual records with maturity states such as evolving and stable.
  • The site explicitly is not a chronological blog or a dumping ground for unfinished content.
  • The current ChatGPT daily briefing contains both public industry analysis and private project-specific recommendations.
  • ChatGPT citation markers such as cite... are not portable website references.

Goals

  1. Make qluna-site safe and intentional to expose as a public repository.
  2. Preserve qluna.net as a formal, durable public record rather than turning it into a generic blog.
  3. Add Briefings as a distinct time-indexed content type.
  4. Support a daily Xtrape 与 AI briefing series with standard, durable source metadata.
  5. Separate the private full briefing from the public qluna.net edition.
  6. Start with reviewable PR-based publishing; do not immediately auto-publish generated content to main.
  7. Keep the existing static Astro + Forgejo + Cloudflare deployment model.
  8. Leave a clean path for RSS, Telegram, email, additional series, and future Xtrape Service automation.

Non-goals

  • Do not introduce a CMS, database, public account system, or runtime AI dependency.
  • Do not turn existing Notes into daily posts.
  • Do not publish private product roadmaps, unreleased architecture decisions, internal priorities, or user-specific recommendations.
  • Do not claim human review when a briefing has only automated validation.
  • Do not fully automate merge-to-production in the first iteration.
  • Do not require a daily English translation in the first iteration.

Phase 1 — Open-source readiness

1. Repository disclosure audit

Audit the current tree and Git history before changing repository visibility.

Check at minimum:

  • committed secrets, tokens, account IDs, email credentials, private endpoints, internal hostnames, private IPs, and personal data;
  • .env*, workflow files, deployment configuration, examples, issue references, comments, and documentation;
  • generated files or artifacts that should not be public;
  • links to private Forgejo resources that would become dead or unintentionally disclose internal structure;
  • historical commits, not only the current working tree.

If sensitive history exists, rotate affected credentials first and rewrite/sanitize history before making the repository public.

Add an explicit record of the audit outcome to the PR description or a repository document. Do not infer safety merely because current workflow secrets are stored outside the repository.

2. Licensing boundary

The repository contains both software and original authored content. Add an explicit dual-licensing model before opening it.

Proposed default, subject to owner confirmation:

  • source code, build scripts, components, and reusable technical patterns: an approved open-source license such as Apache-2.0;
  • authored essays, notes, books, manifesto text, brand copy, images, and briefing editorial content: copyright retained by Q. Luna unless a specific content license is stated;
  • third-party quotations, screenshots, logos, and referenced material remain under their respective rights.

Required outputs:

  • root LICENSE for code;
  • CONTENT-LICENSE.md or equivalent explaining the content boundary;
  • concise README licensing section;
  • file/path rules clear enough that contributors and reuse agents can determine which license applies.

Do not place all authored content under the code license by accident.

3. Public repository metadata and governance

Update or add as appropriate:

  • public-facing repository description;
  • README with purpose, architecture, local development, deployment boundary, contribution expectations, and licensing;
  • CONTRIBUTING.md;
  • SECURITY.md with a private vulnerability-reporting path;
  • optional CODE_OF_CONDUCT.md only if public contribution is intended;
  • issue/PR templates only where they improve the actual workflow;
  • badges only when they represent working public checks.

Clarify that:

  • the public repository is the source of qluna.net;
  • public visibility does not grant permission to republish authored content beyond its content license;
  • production secrets remain in Forgejo/Cloudflare configuration;
  • external contributions may be accepted selectively and editorial publication remains controlled by Q. Luna.

4. Public/private boundary

Document which material must never be committed to the public repository, including:

  • private full daily briefings;
  • unreleased product roadmaps and competitive strategy;
  • internal architecture decisions not yet approved for publication;
  • credentials and private infrastructure details;
  • personal correspondence and reader submissions without explicit publication consent;
  • model prompts or generated analysis containing private project context.

The repository may contain only the reviewed public edition of each briefing.


Phase 2 — Add Briefings as a distinct content type

5. Information architecture

Add a top-level Briefings / 简报 section without redefining qluna.net as a chronological blog.

Recommended public routes:

/briefings/
/briefings/xtrape-ai/
/briefings/xtrape-ai/2026-07-27/

Semantics:

  • /briefings/ lists available briefing series;
  • /briefings/xtrape-ai/ is the series landing page and archive;
  • the dated route is one edition captured at a specific publication date;
  • Notes remain revisable arguments; Briefings remain dated information snapshots with explicit corrections.

Reserve the route and model for future series without hard-coding all behavior to xtrape-ai.

6. Source layout

Use a scalable source layout, for example:

src/content/briefings/
└── xtrape-ai/
    └── zh/
        └── 2026/
            └── 07/
                └── 2026-07-27.md

The exact path may vary, but it must support:

  • multiple briefing series;
  • multiple locales;
  • date-based archival organization;
  • stable generated routes independent of source filename quirks.

Chinese is the initial required locale. English may initially provide only a series introduction or later weekly digest; missing daily translations must not break the build.

7. Briefing schema

Add a separate Astro content collection rather than overloading notes.

Minimum proposed metadata:

title: Xtrape 与 AI 每日简报|2026-07-27
description: 今日 Agent、AI 和软件技术的重要动态与判断。
language: zh
series: xtrape-ai
publishedAt: 2026-07-27
updatedAt: 2026-07-27
edition: 1
status: published
topics:
  - xtrape
  - ai-agents
  - software
sourceWindow:
  from: 2026-07-26
  to: 2026-07-27
aiAssisted: true
reviewStatus: automated
sources:
  - id: github-mcp-2026-07-23
    title: Example source title
    publisher: GitHub
    publishedAt: 2026-07-23
    url: https://example.com/source

Recommended status values:

  • draft
  • published
  • corrected
  • withdrawn

Recommended review status values:

  • automated
  • editor-reviewed

Validation requirements:

  • route date and publishedAt agree;
  • updatedAt is not earlier than publishedAt;
  • source IDs are unique within an edition;
  • each source has title, publisher, publication date, and valid URL;
  • no ChatGPT-specific citation markers remain;
  • no empty source list for a published edition;
  • no duplicate edition for the same series, locale, and date;
  • future-dated editions fail unless explicitly supported for drafts;
  • editor-reviewed must be explicitly set by a human-authored change, not inferred by automation.

8. Citation and source rendering

Replace ChatGPT internal references with normal website references.

The rendered edition should provide:

  • inline source references or stable source numbers;
  • a source section with title, publisher, original publication date, and link;
  • rel="noopener noreferrer" and sensible external-link behavior;
  • clear distinction between the source publication date and qluna.net briefing publication date;
  • optional access/check date if later needed.

Do not reproduce large portions of source articles. Briefings should summarize and analyze while linking to originals.

9. Edition structure

Use a consistent editorial structure while allowing sections to be omitted when not meaningful:

  1. date and observation window;
  2. core judgment;
  3. selected high-value developments;
  4. for each development:
    • what happened;
    • why it matters;
    • relationship to public Xtrape concepts or public project directions;
    • suggested public follow-up/action;
    • source references and publication dates;
  5. overall assessment;
  6. correction/revision notice where applicable;
  7. generation/review disclosure.

Avoid low-value repetition, generic AI news lists, and unsupported claims about Xtrape plans.

10. Public disclosure text

Render a visible disclosure based on aiAssisted and reviewStatus.

For automated:

本简报由 AI 辅助检索、整理和分析,可能存在遗漏或误判。事实信息请以所列原始来源为准。

For editor-reviewed:

本简报由 AI 辅助生成,并经 Q. Luna 编辑审核。

Do not use the reviewed wording unless a human has actually reviewed that edition.

11. Corrections and historical integrity

A briefing is a dated snapshot, not an endlessly evolving Note.

Define correction rules:

  • preserve the original publication date;
  • update updatedAt and increment edition for material corrections;
  • add a visible correction note explaining the change;
  • use corrected when facts or material interpretations changed;
  • use withdrawn rather than silently deleting an edition that should no longer be relied upon;
  • Git history is supporting evidence but must not be the only user-visible correction mechanism.

Phase 3 — Pages, navigation, feeds, and SEO

12. Required implementation surface

Expected changes include, but are not limited to:

src/content.config.ts
src/content/briefings/
src/lib/briefings.ts
src/components/BriefingPage.astro
src/pages/briefings/index.astro
src/pages/briefings/[series]/index.astro
src/pages/briefings/[series]/[date].astro
src/i18n/ui.ts
src/content/pages/zh/home.md
src/content/settings/zh.md
docs/content-model.md
docs/site-information-architecture.md
docs/editorial-workflow.md
docs/architecture.md
scripts/verify-head.mjs
README.md
LICENSE
CONTENT-LICENSE.md
CONTRIBUTING.md
SECURITY.md

Use the existing content-first rule: editable public copy belongs in Markdown/config content, while Astro components own behavior.

13. Navigation and homepage

  • Add a compact 简报 entry to Chinese navigation if it fits the existing mobile-first header constraint.
  • Add a homepage entry point to the latest Xtrape and AI briefing or to the Briefings index.
  • Do not let daily entries dominate the site identity or displace durable Notes, Topics, Books, Glossary, Projects, and Timeline.
  • The homepage may show only the latest edition and a link to the archive.

14. RSS/Atom

Add at least one machine-readable feed:

/briefings/xtrape-ai/rss.xml

The feed should include:

  • title;
  • canonical edition URL;
  • publication/update dates;
  • summary;
  • stable GUID;
  • only public editions;
  • corrected editions with updated timestamps.

Design feed generation so additional series can reuse it.

15. SEO and structured metadata

For each edition:

  • emit canonical URL;
  • use article/news-style Open Graph metadata where appropriate;
  • include publication and modification dates;
  • avoid claiming multilingual alternates when no equivalent translation exists;
  • ensure archive pagination/indexing remains manageable as editions accumulate;
  • consider JSON-LD only if implemented accurately and validated.

Phase 4 — Daily publication workflow

16. Two-output model

The daily process must produce two logically separate outputs.

Private full edition

Delivered privately and allowed to contain:

  • internal Xtrape/WitBill/agent-dev relevance;
  • unreleased roadmap implications;
  • repository/version-specific recommendations;
  • competitive or commercial strategy;
  • user-specific actions.

This output must not be committed to qluna-site.

Public qluna.net edition

May contain only:

  • verified public developments;
  • why they matter;
  • relationships to already-public Xtrape concepts and public projects;
  • public-facing recommendations;
  • standard source metadata;
  • AI/review disclosure.

Replace the current instruction:

与 Xtrape 或用户当前产品方向的关联

with the public-safe form:

与 Xtrape 已公开理念、公开架构或公开项目方向的关联。

17. Initial publishing mode: PR required

Implement or document this first-stage flow:

scheduled research/generation
  → private full briefing
  → derived public-safe Markdown edition
  → source and privacy validation
  → branch + PR to qluna-site
  → human review
  → merge to main
  → existing Cloudflare deployment

Requirements:

  • automation must not push generated briefing content directly to main initially;
  • PR body should summarize sources, review status, and any redaction/public-boundary decisions;
  • build must reject invalid citation markers, schema failures, duplicate dates, and known private markers;
  • merging remains an explicit publication decision.

18. Future automation boundary

Do not create a separate service solely to publish the first briefing.

Keep publication logic inside the existing repository/workflow while it serves only qluna.net. Reconsider a dedicated qluna-briefing or Xtrape Service when the same pipeline supports multiple destinations such as:

  • qluna.net;
  • Telegram;
  • email;
  • RSS/Atom;
  • multiple briefing series;
  • multiple languages;
  • reusable source collection and review policies.

Document that future service boundary without implementing premature infrastructure.


Quality and security checks

Extend build or verification scripts to cover at least:

  • briefing route generation;
  • duplicate date/series detection;
  • source schema validity;
  • no cite, turn...search, turn...news, sandbox:/, or other ChatGPT-internal artifacts in public Markdown;
  • no obvious private markers such as internal-only sections or unreleased roadmap headings;
  • no raw secrets or private environment values;
  • valid RSS output;
  • mobile rendering of archive and edition pages;
  • correct canonical URLs;
  • no broken navigation targets;
  • production build succeeds with existing Cloudflare Worker deployment.

Automated privacy-marker checks are defense in depth only; they do not replace human review.

Documentation updates

Update the project documentation to state clearly:

  • why Briefings are distinct from Notes;
  • how an edition is corrected or withdrawn;
  • how sources are represented;
  • how AI assistance and human review are disclosed;
  • what content must remain private;
  • how daily PR publication works;
  • how repository code/content licensing is divided;
  • what must be completed before changing repository visibility to public.

Acceptance criteria

  • Repository and Git history have been audited for secrets, personal data, private infrastructure details, and inappropriate public links.
  • Any exposed credentials have been rotated and sensitive history sanitized before visibility changes.
  • Code and authored-content licensing boundaries are explicit and documented.
  • README and public governance/security documents are suitable for a public repository.
  • Public/private publication boundaries are documented.
  • briefings exists as a separate validated Astro content collection.
  • /briefings/, series archive, and dated edition routes render correctly.
  • At least one sample/real xtrape-ai Chinese edition builds using durable source metadata.
  • ChatGPT internal citation syntax is rejected by validation.
  • Automated and editor-reviewed disclosures render accurately.
  • Corrections and withdrawals have documented and visible semantics.
  • Xtrape and AI series RSS/Atom feed is generated and valid.
  • Homepage/navigation exposes Briefings without turning the site into a chronological blog.
  • Daily publication is implemented or fully documented as a PR-first workflow.
  • No generated briefing is automatically merged to production in the initial version.
  • Existing Forgejo-to-Cloudflare deployment remains functional.
  • Repository visibility is changed to public only after all open-source readiness gates pass.

Implementation sequencing

Use separate commits, or separate PRs if the change becomes too large:

  1. open-source audit, licensing, public repository documentation, and private-boundary rules;
  2. Briefings schema, routes, rendering, validation, and documentation;
  3. first public edition and RSS feed;
  4. PR-based daily publication workflow;
  5. final repository visibility change after review.

The visibility change must be the last step, not the first.


Source: chatgpt

## Summary Open-source `qluna/qluna-site` and extend qluna.net with a dedicated, durable publication structure for daily briefings, starting with **Xtrape 与 AI 每日简报**. This issue combines the two changes because opening the repository makes all committed site content and history public, while daily briefings introduce a high-frequency, source-heavy content stream with different semantics from the existing revisable `Notes` model. The public/private boundary, licensing, content model, source representation, and publishing workflow must therefore be designed together. ## Current state - The repository is private. - qluna.net is an Astro static site deployed from Forgejo `main` to Cloudflare Worker static assets. - Public content is stored in Git-backed Markdown. - `Notes` are revisable long-form intellectual records with maturity states such as `evolving` and `stable`. - The site explicitly is not a chronological blog or a dumping ground for unfinished content. - The current ChatGPT daily briefing contains both public industry analysis and private project-specific recommendations. - ChatGPT citation markers such as `cite...` are not portable website references. ## Goals 1. Make `qluna-site` safe and intentional to expose as a public repository. 2. Preserve qluna.net as a formal, durable public record rather than turning it into a generic blog. 3. Add `Briefings` as a distinct time-indexed content type. 4. Support a daily **Xtrape 与 AI** briefing series with standard, durable source metadata. 5. Separate the private full briefing from the public qluna.net edition. 6. Start with reviewable PR-based publishing; do not immediately auto-publish generated content to `main`. 7. Keep the existing static Astro + Forgejo + Cloudflare deployment model. 8. Leave a clean path for RSS, Telegram, email, additional series, and future Xtrape Service automation. ## Non-goals - Do not introduce a CMS, database, public account system, or runtime AI dependency. - Do not turn existing `Notes` into daily posts. - Do not publish private product roadmaps, unreleased architecture decisions, internal priorities, or user-specific recommendations. - Do not claim human review when a briefing has only automated validation. - Do not fully automate merge-to-production in the first iteration. - Do not require a daily English translation in the first iteration. --- # Phase 1 — Open-source readiness ## 1. Repository disclosure audit Audit the current tree and Git history before changing repository visibility. Check at minimum: - committed secrets, tokens, account IDs, email credentials, private endpoints, internal hostnames, private IPs, and personal data; - `.env*`, workflow files, deployment configuration, examples, issue references, comments, and documentation; - generated files or artifacts that should not be public; - links to private Forgejo resources that would become dead or unintentionally disclose internal structure; - historical commits, not only the current working tree. If sensitive history exists, rotate affected credentials first and rewrite/sanitize history before making the repository public. Add an explicit record of the audit outcome to the PR description or a repository document. Do not infer safety merely because current workflow secrets are stored outside the repository. ## 2. Licensing boundary The repository contains both software and original authored content. Add an explicit dual-licensing model before opening it. Proposed default, subject to owner confirmation: - source code, build scripts, components, and reusable technical patterns: an approved open-source license such as Apache-2.0; - authored essays, notes, books, manifesto text, brand copy, images, and briefing editorial content: copyright retained by Q. Luna unless a specific content license is stated; - third-party quotations, screenshots, logos, and referenced material remain under their respective rights. Required outputs: - root `LICENSE` for code; - `CONTENT-LICENSE.md` or equivalent explaining the content boundary; - concise README licensing section; - file/path rules clear enough that contributors and reuse agents can determine which license applies. Do not place all authored content under the code license by accident. ## 3. Public repository metadata and governance Update or add as appropriate: - public-facing repository description; - README with purpose, architecture, local development, deployment boundary, contribution expectations, and licensing; - `CONTRIBUTING.md`; - `SECURITY.md` with a private vulnerability-reporting path; - optional `CODE_OF_CONDUCT.md` only if public contribution is intended; - issue/PR templates only where they improve the actual workflow; - badges only when they represent working public checks. Clarify that: - the public repository is the source of qluna.net; - public visibility does not grant permission to republish authored content beyond its content license; - production secrets remain in Forgejo/Cloudflare configuration; - external contributions may be accepted selectively and editorial publication remains controlled by Q. Luna. ## 4. Public/private boundary Document which material must never be committed to the public repository, including: - private full daily briefings; - unreleased product roadmaps and competitive strategy; - internal architecture decisions not yet approved for publication; - credentials and private infrastructure details; - personal correspondence and reader submissions without explicit publication consent; - model prompts or generated analysis containing private project context. The repository may contain only the reviewed public edition of each briefing. --- # Phase 2 — Add `Briefings` as a distinct content type ## 5. Information architecture Add a top-level `Briefings / 简报` section without redefining qluna.net as a chronological blog. Recommended public routes: ```text /briefings/ /briefings/xtrape-ai/ /briefings/xtrape-ai/2026-07-27/ ``` Semantics: - `/briefings/` lists available briefing series; - `/briefings/xtrape-ai/` is the series landing page and archive; - the dated route is one edition captured at a specific publication date; - Notes remain revisable arguments; Briefings remain dated information snapshots with explicit corrections. Reserve the route and model for future series without hard-coding all behavior to `xtrape-ai`. ## 6. Source layout Use a scalable source layout, for example: ```text src/content/briefings/ └── xtrape-ai/ └── zh/ └── 2026/ └── 07/ └── 2026-07-27.md ``` The exact path may vary, but it must support: - multiple briefing series; - multiple locales; - date-based archival organization; - stable generated routes independent of source filename quirks. Chinese is the initial required locale. English may initially provide only a series introduction or later weekly digest; missing daily translations must not break the build. ## 7. Briefing schema Add a separate Astro content collection rather than overloading `notes`. Minimum proposed metadata: ```yaml title: Xtrape 与 AI 每日简报|2026-07-27 description: 今日 Agent、AI 和软件技术的重要动态与判断。 language: zh series: xtrape-ai publishedAt: 2026-07-27 updatedAt: 2026-07-27 edition: 1 status: published topics: - xtrape - ai-agents - software sourceWindow: from: 2026-07-26 to: 2026-07-27 aiAssisted: true reviewStatus: automated sources: - id: github-mcp-2026-07-23 title: Example source title publisher: GitHub publishedAt: 2026-07-23 url: https://example.com/source ``` Recommended status values: - `draft` - `published` - `corrected` - `withdrawn` Recommended review status values: - `automated` - `editor-reviewed` Validation requirements: - route date and `publishedAt` agree; - `updatedAt` is not earlier than `publishedAt`; - source IDs are unique within an edition; - each source has title, publisher, publication date, and valid URL; - no ChatGPT-specific citation markers remain; - no empty source list for a published edition; - no duplicate edition for the same series, locale, and date; - future-dated editions fail unless explicitly supported for drafts; - `editor-reviewed` must be explicitly set by a human-authored change, not inferred by automation. ## 8. Citation and source rendering Replace ChatGPT internal references with normal website references. The rendered edition should provide: - inline source references or stable source numbers; - a source section with title, publisher, original publication date, and link; - `rel="noopener noreferrer"` and sensible external-link behavior; - clear distinction between the source publication date and qluna.net briefing publication date; - optional access/check date if later needed. Do not reproduce large portions of source articles. Briefings should summarize and analyze while linking to originals. ## 9. Edition structure Use a consistent editorial structure while allowing sections to be omitted when not meaningful: 1. date and observation window; 2. core judgment; 3. selected high-value developments; 4. for each development: - what happened; - why it matters; - relationship to public Xtrape concepts or public project directions; - suggested public follow-up/action; - source references and publication dates; 5. overall assessment; 6. correction/revision notice where applicable; 7. generation/review disclosure. Avoid low-value repetition, generic AI news lists, and unsupported claims about Xtrape plans. ## 10. Public disclosure text Render a visible disclosure based on `aiAssisted` and `reviewStatus`. For `automated`: > 本简报由 AI 辅助检索、整理和分析,可能存在遗漏或误判。事实信息请以所列原始来源为准。 For `editor-reviewed`: > 本简报由 AI 辅助生成,并经 Q. Luna 编辑审核。 Do not use the reviewed wording unless a human has actually reviewed that edition. ## 11. Corrections and historical integrity A briefing is a dated snapshot, not an endlessly evolving Note. Define correction rules: - preserve the original publication date; - update `updatedAt` and increment `edition` for material corrections; - add a visible correction note explaining the change; - use `corrected` when facts or material interpretations changed; - use `withdrawn` rather than silently deleting an edition that should no longer be relied upon; - Git history is supporting evidence but must not be the only user-visible correction mechanism. --- # Phase 3 — Pages, navigation, feeds, and SEO ## 12. Required implementation surface Expected changes include, but are not limited to: ```text src/content.config.ts src/content/briefings/ src/lib/briefings.ts src/components/BriefingPage.astro src/pages/briefings/index.astro src/pages/briefings/[series]/index.astro src/pages/briefings/[series]/[date].astro src/i18n/ui.ts src/content/pages/zh/home.md src/content/settings/zh.md docs/content-model.md docs/site-information-architecture.md docs/editorial-workflow.md docs/architecture.md scripts/verify-head.mjs README.md LICENSE CONTENT-LICENSE.md CONTRIBUTING.md SECURITY.md ``` Use the existing content-first rule: editable public copy belongs in Markdown/config content, while Astro components own behavior. ## 13. Navigation and homepage - Add a compact `简报` entry to Chinese navigation if it fits the existing mobile-first header constraint. - Add a homepage entry point to the latest Xtrape and AI briefing or to the Briefings index. - Do not let daily entries dominate the site identity or displace durable Notes, Topics, Books, Glossary, Projects, and Timeline. - The homepage may show only the latest edition and a link to the archive. ## 14. RSS/Atom Add at least one machine-readable feed: ```text /briefings/xtrape-ai/rss.xml ``` The feed should include: - title; - canonical edition URL; - publication/update dates; - summary; - stable GUID; - only public editions; - corrected editions with updated timestamps. Design feed generation so additional series can reuse it. ## 15. SEO and structured metadata For each edition: - emit canonical URL; - use article/news-style Open Graph metadata where appropriate; - include publication and modification dates; - avoid claiming multilingual alternates when no equivalent translation exists; - ensure archive pagination/indexing remains manageable as editions accumulate; - consider JSON-LD only if implemented accurately and validated. --- # Phase 4 — Daily publication workflow ## 16. Two-output model The daily process must produce two logically separate outputs. ### Private full edition Delivered privately and allowed to contain: - internal Xtrape/WitBill/agent-dev relevance; - unreleased roadmap implications; - repository/version-specific recommendations; - competitive or commercial strategy; - user-specific actions. This output must not be committed to `qluna-site`. ### Public qluna.net edition May contain only: - verified public developments; - why they matter; - relationships to already-public Xtrape concepts and public projects; - public-facing recommendations; - standard source metadata; - AI/review disclosure. Replace the current instruction: > 与 Xtrape 或用户当前产品方向的关联 with the public-safe form: > 与 Xtrape 已公开理念、公开架构或公开项目方向的关联。 ## 17. Initial publishing mode: PR required Implement or document this first-stage flow: ```text scheduled research/generation → private full briefing → derived public-safe Markdown edition → source and privacy validation → branch + PR to qluna-site → human review → merge to main → existing Cloudflare deployment ``` Requirements: - automation must not push generated briefing content directly to `main` initially; - PR body should summarize sources, review status, and any redaction/public-boundary decisions; - build must reject invalid citation markers, schema failures, duplicate dates, and known private markers; - merging remains an explicit publication decision. ## 18. Future automation boundary Do not create a separate service solely to publish the first briefing. Keep publication logic inside the existing repository/workflow while it serves only qluna.net. Reconsider a dedicated `qluna-briefing` or Xtrape Service when the same pipeline supports multiple destinations such as: - qluna.net; - Telegram; - email; - RSS/Atom; - multiple briefing series; - multiple languages; - reusable source collection and review policies. Document that future service boundary without implementing premature infrastructure. --- # Quality and security checks Extend build or verification scripts to cover at least: - briefing route generation; - duplicate date/series detection; - source schema validity; - no `cite`, `turn...search`, `turn...news`, `sandbox:/`, or other ChatGPT-internal artifacts in public Markdown; - no obvious private markers such as internal-only sections or unreleased roadmap headings; - no raw secrets or private environment values; - valid RSS output; - mobile rendering of archive and edition pages; - correct canonical URLs; - no broken navigation targets; - production build succeeds with existing Cloudflare Worker deployment. Automated privacy-marker checks are defense in depth only; they do not replace human review. # Documentation updates Update the project documentation to state clearly: - why Briefings are distinct from Notes; - how an edition is corrected or withdrawn; - how sources are represented; - how AI assistance and human review are disclosed; - what content must remain private; - how daily PR publication works; - how repository code/content licensing is divided; - what must be completed before changing repository visibility to public. # Acceptance criteria - [ ] Repository and Git history have been audited for secrets, personal data, private infrastructure details, and inappropriate public links. - [ ] Any exposed credentials have been rotated and sensitive history sanitized before visibility changes. - [ ] Code and authored-content licensing boundaries are explicit and documented. - [ ] README and public governance/security documents are suitable for a public repository. - [ ] Public/private publication boundaries are documented. - [ ] `briefings` exists as a separate validated Astro content collection. - [ ] `/briefings/`, series archive, and dated edition routes render correctly. - [ ] At least one sample/real `xtrape-ai` Chinese edition builds using durable source metadata. - [ ] ChatGPT internal citation syntax is rejected by validation. - [ ] Automated and editor-reviewed disclosures render accurately. - [ ] Corrections and withdrawals have documented and visible semantics. - [ ] Xtrape and AI series RSS/Atom feed is generated and valid. - [ ] Homepage/navigation exposes Briefings without turning the site into a chronological blog. - [ ] Daily publication is implemented or fully documented as a PR-first workflow. - [ ] No generated briefing is automatically merged to production in the initial version. - [ ] Existing Forgejo-to-Cloudflare deployment remains functional. - [ ] Repository visibility is changed to public only after all open-source readiness gates pass. # Implementation sequencing Use separate commits, or separate PRs if the change becomes too large: 1. open-source audit, licensing, public repository documentation, and private-boundary rules; 2. Briefings schema, routes, rendering, validation, and documentation; 3. first public edition and RSS feed; 4. PR-based daily publication workflow; 5. final repository visibility change after review. The visibility change must be the last step, not the first. --- Source: chatgpt
Owner

Implementation up as PR #15 (phases 1–4 in four sequenced commits). The repository visibility change is intentionally excluded — see the visibility-change checklist and the one open audit finding (committer identities in history) in docs/open-source-readiness.md; both need an owner decision after the PR merges.

Implementation up as PR #15 (phases 1–4 in four sequenced commits). The repository visibility change is intentionally excluded — see the visibility-change checklist and the one open audit finding (committer identities in history) in docs/open-source-readiness.md; both need an owner decision after the PR merges.
Author
Owner

Clarification — current briefing source and staged publishing boundary

The initial implementation must treat the existing ChatGPT scheduled task “每日 Xtrape 与 AI 简报” as the current upstream briefing generator.

Current factual/source input

The briefing is assembled from public web sources, prioritizing:

  • official product announcements, technical blogs, documentation, and release notes;
  • GitHub/Forgejo open-source releases and project updates;
  • reputable global English-language and Chinese-language technology media;
  • official policy and regulatory sources from the EU, Finland, China, and other relevant jurisdictions;
  • primary research papers and institutional publications where applicable.

These are the factual sources of the briefing. Before publication on qluna.net, ChatGPT-specific citation markers must be converted into durable website source metadata with normal public URLs.

Current generation flow

For the first iteration, the actual upstream flow is:

ChatGPT scheduled task: 每日 Xtrape 与 AI 简报
  → public-web research
  → private full briefing delivered in ChatGPT
  → derive a public-safe qluna.net edition
  → convert citations to structured source metadata
  → create a branch and PR in qluna-site
  → human review and explicit merge
  → existing main-to-Cloudflare deployment

The private full edition may contain user-specific, repository-specific, unreleased roadmap, competitive, and internal-priority analysis. It must never be committed to the public qluna-site repository.

The public edition must be derived from the private full edition and limited to verified public developments, public Xtrape concepts, public project directions, durable source metadata, and an accurate AI/review disclosure.

Not yet implemented

At the time of this issue, the ChatGPT scheduled task only generates and returns the private briefing in the ChatGPT conversation. It does not yet:

  • create website Markdown;
  • redact private project context;
  • convert ChatGPT citations to durable source records;
  • create a qluna-site branch or PR;
  • publish to qluna.net.

Those steps are implementation work covered by this issue; the issue must not imply that an automated publication pipeline already exists.

Future boundary

Do not introduce a dedicated service in the first iteration. Keep qluna-site as the publication target and use PR-based review.

Reconsider a separate qluna-briefing repository or Xtrape Service only when the same generation pipeline must serve multiple destinations or products, such as qluna.net, Telegram, email, RSS/Atom, multiple briefing series, or multiple languages.

Acceptance-criteria addition

  • Documentation explicitly identifies the existing ChatGPT scheduled task as the initial upstream generator.
  • The implemented workflow clearly separates public source input, private full output, and public derived output.
  • The repository and UI do not imply that the publication pipeline is already automated before branch/PR creation is actually implemented.
## Clarification — current briefing source and staged publishing boundary The initial implementation must treat the existing ChatGPT scheduled task **“每日 Xtrape 与 AI 简报”** as the current upstream briefing generator. ### Current factual/source input The briefing is assembled from public web sources, prioritizing: - official product announcements, technical blogs, documentation, and release notes; - GitHub/Forgejo open-source releases and project updates; - reputable global English-language and Chinese-language technology media; - official policy and regulatory sources from the EU, Finland, China, and other relevant jurisdictions; - primary research papers and institutional publications where applicable. These are the factual sources of the briefing. Before publication on qluna.net, ChatGPT-specific citation markers must be converted into durable website source metadata with normal public URLs. ### Current generation flow For the first iteration, the actual upstream flow is: ```text ChatGPT scheduled task: 每日 Xtrape 与 AI 简报 → public-web research → private full briefing delivered in ChatGPT → derive a public-safe qluna.net edition → convert citations to structured source metadata → create a branch and PR in qluna-site → human review and explicit merge → existing main-to-Cloudflare deployment ``` The private full edition may contain user-specific, repository-specific, unreleased roadmap, competitive, and internal-priority analysis. It must never be committed to the public `qluna-site` repository. The public edition must be derived from the private full edition and limited to verified public developments, public Xtrape concepts, public project directions, durable source metadata, and an accurate AI/review disclosure. ### Not yet implemented At the time of this issue, the ChatGPT scheduled task only generates and returns the private briefing in the ChatGPT conversation. It does **not yet**: - create website Markdown; - redact private project context; - convert ChatGPT citations to durable source records; - create a qluna-site branch or PR; - publish to qluna.net. Those steps are implementation work covered by this issue; the issue must not imply that an automated publication pipeline already exists. ### Future boundary Do not introduce a dedicated service in the first iteration. Keep qluna-site as the publication target and use PR-based review. Reconsider a separate `qluna-briefing` repository or Xtrape Service only when the same generation pipeline must serve multiple destinations or products, such as qluna.net, Telegram, email, RSS/Atom, multiple briefing series, or multiple languages. ### Acceptance-criteria addition - [ ] Documentation explicitly identifies the existing ChatGPT scheduled task as the initial upstream generator. - [ ] The implemented workflow clearly separates public source input, private full output, and public derived output. - [ ] The repository and UI do not imply that the publication pipeline is already automated before branch/PR creation is actually implemented.
Author
Owner

Workflow update — current upstream and automated PR behavior

The current upstream for the public briefing is explicitly the existing ChatGPT scheduled task “每日 Xtrape 与 AI 简报”. It is not a separate crawler, Forgejo workflow, or Xtrape Service at this stage.

The scheduled task has now been updated to use a two-output workflow:

public web research
  → private full “每日 Xtrape 与 AI 简报” delivered in ChatGPT
  → derived public-safe qluna.net edition
  → Briefings schema/source/privacy validation
  → branch + PR to qluna-site
  → human review
  → merge to main
  → existing Cloudflare deployment

Operational rules now applied to the scheduled task:

  • The private full edition may contain non-public roadmap implications, repository/version-specific advice, competitive strategy, and user-specific actions.
  • The qluna.net edition may contain only public facts, public sources, and relationships to already-public Xtrape concepts, architecture, or project directions.
  • ChatGPT internal citation markers must be converted to normal source metadata and URLs before repository publication.
  • The task must first check whether main already contains the Briefings collection, paths, schema, and validators defined by this issue.
  • Until #14 is implemented, Forgejo publication is skipped and the daily report must state that publication was blocked by #14.
  • After #14 is implemented, the task creates an independent date-specific branch and a non-draft PR targeting main.
  • It must never push generated briefing content directly to main and must never auto-merge.
  • Duplicate editions or PRs for the same date must not be created.
  • The private daily report must always include the qluna.net publishing result, PR link if created, or the blocking reason.

A dedicated qluna-briefing or Xtrape Service remains a future boundary only after the pipeline is reused across multiple destinations, series, or languages.

## Workflow update — current upstream and automated PR behavior The current upstream for the public briefing is explicitly the existing ChatGPT scheduled task **“每日 Xtrape 与 AI 简报”**. It is not a separate crawler, Forgejo workflow, or Xtrape Service at this stage. The scheduled task has now been updated to use a two-output workflow: ```text public web research → private full “每日 Xtrape 与 AI 简报” delivered in ChatGPT → derived public-safe qluna.net edition → Briefings schema/source/privacy validation → branch + PR to qluna-site → human review → merge to main → existing Cloudflare deployment ``` Operational rules now applied to the scheduled task: - The private full edition may contain non-public roadmap implications, repository/version-specific advice, competitive strategy, and user-specific actions. - The qluna.net edition may contain only public facts, public sources, and relationships to already-public Xtrape concepts, architecture, or project directions. - ChatGPT internal citation markers must be converted to normal source metadata and URLs before repository publication. - The task must first check whether `main` already contains the Briefings collection, paths, schema, and validators defined by this issue. - Until #14 is implemented, Forgejo publication is skipped and the daily report must state that publication was blocked by #14. - After #14 is implemented, the task creates an independent date-specific branch and a non-draft PR targeting `main`. - It must never push generated briefing content directly to `main` and must never auto-merge. - Duplicate editions or PRs for the same date must not be created. - The private daily report must always include the qluna.net publishing result, PR link if created, or the blocking reason. A dedicated `qluna-briefing` or Xtrape Service remains a future boundary only after the pipeline is reused across multiple destinations, series, or languages.
Owner

PR #15 merged after a 2-round review (iteration 1: 1 High / 5 Medium / 2 Low, all closed; iteration 2: APPROVED, 0 blocking) and is live on qluna.net (/briefings, /briefings/xtrape-ai/2026-07-27, per-series Atom feed, /en/briefings all verified 200).

Recorded follow-ups from this issue, still open:

  1. Owner-gated, before visibility change: committer-identity decision + final spot-check per the checklist in docs/open-source-readiness.md; the visibility flip itself remains a manual owner step.
  2. Reviewer suggestion (non-blocking): if mutable live-state sources (countdown/placeholder pages) become common in editions, add optional accessedAt/observedAt source metadata to distinguish source publication date from observation time.
  3. Kimi K3 release follow-up promised in a subsequent edition once weights + license are actually verifiable (or the date slips).
PR #15 merged after a 2-round review (iteration 1: 1 High / 5 Medium / 2 Low, all closed; iteration 2: APPROVED, 0 blocking) and is live on qluna.net (/briefings, /briefings/xtrape-ai/2026-07-27, per-series Atom feed, /en/briefings all verified 200). Recorded follow-ups from this issue, still open: 1. **Owner-gated, before visibility change:** committer-identity decision + final spot-check per the checklist in docs/open-source-readiness.md; the visibility flip itself remains a manual owner step. 2. **Reviewer suggestion (non-blocking):** if mutable live-state sources (countdown/placeholder pages) become common in editions, add optional `accessedAt`/`observedAt` source metadata to distinguish source publication date from observation time. 3. Kimi K3 release follow-up promised in a subsequent edition once weights + license are actually verifiable (or the date slips).
Author
Owner

Acceptance Review — Iteration 3 (Deep Review)

Implementation reviewed: merged PR #15 (879fde2, merged to main as ffd962b)
Result: Not approved for closure — 2 repository-configuration gates remain

The code/content implementation for phases 1–4 is approved: the Briefings content model, source validation, correction/withdrawal semantics, locale behavior, article metadata, bounded yearly archives, Atom feed, licensing boundary, public/private workflow, and first public edition all passed the prior two deep-review rounds. PR #15 is merged without remaining code findings.

However, Issue #14 is broader than PR #15: it explicitly includes opening qluna-site as a public repository and enforcing PR-based publication governance. The current repository configuration does not yet satisfy those goals.

High — Repository is still private

Forgejo currently reports qluna/qluna-site as private: true.

This is consistent with PR #15 deliberately leaving the visibility change as a manual owner step, but it means Issue #14's open-source objective is not yet complete. Before changing visibility:

  1. make the recorded owner decision on exposing the XuSage6397 and agent commit identities;
  2. rewrite history first if that linkage is not acceptable;
  3. perform the documented final git log -p disclosure spot-check;
  4. then change repository visibility to public.

High — main is not protected

Forgejo currently reports the main branch as protected: false.

That contradicts the merged editorial workflow's stated invariant that every generated edition enters through a reviewed PR and that merging to main is the human publication decision. Documentation and build checks cannot enforce this boundary while direct pushes remain permitted.

Configure branch protection for main before closing the issue. At minimum:

  • require changes through pull requests;
  • require at least one approval;
  • prevent direct/force pushes and branch deletion;
  • preserve the existing deployment trigger after an approved merge.

Closure gate

Issue #14 is ready for final approval and closure once both repository-level operations are complete:

  • main branch protection is enabled and verified;
  • the disclosure checklist is completed and repository visibility is changed to public.

No additional code change is requested in the merged implementation.

## Acceptance Review — Iteration 3 (Deep Review) **Implementation reviewed:** merged PR #15 (`879fde2`, merged to `main` as `ffd962b`) **Result:** **Not approved for closure — 2 repository-configuration gates remain** The code/content implementation for phases 1–4 is approved: the Briefings content model, source validation, correction/withdrawal semantics, locale behavior, article metadata, bounded yearly archives, Atom feed, licensing boundary, public/private workflow, and first public edition all passed the prior two deep-review rounds. PR #15 is merged without remaining code findings. However, Issue #14 is broader than PR #15: it explicitly includes opening `qluna-site` as a public repository and enforcing PR-based publication governance. The current repository configuration does not yet satisfy those goals. ### High — Repository is still private Forgejo currently reports `qluna/qluna-site` as `private: true`. This is consistent with PR #15 deliberately leaving the visibility change as a manual owner step, but it means Issue #14's open-source objective is not yet complete. Before changing visibility: 1. make the recorded owner decision on exposing the `XuSage6397` and agent commit identities; 2. rewrite history first if that linkage is not acceptable; 3. perform the documented final `git log -p` disclosure spot-check; 4. then change repository visibility to public. ### High — `main` is not protected Forgejo currently reports the `main` branch as `protected: false`. That contradicts the merged editorial workflow's stated invariant that every generated edition enters through a reviewed PR and that merging to `main` is the human publication decision. Documentation and build checks cannot enforce this boundary while direct pushes remain permitted. Configure branch protection for `main` before closing the issue. At minimum: - require changes through pull requests; - require at least one approval; - prevent direct/force pushes and branch deletion; - preserve the existing deployment trigger after an approved merge. ### Closure gate Issue #14 is ready for final approval and closure once both repository-level operations are complete: - [ ] `main` branch protection is enabled and verified; - [ ] the disclosure checklist is completed and repository visibility is changed to public. No additional code change is requested in the merged implementation.
Owner

Acceptance gate 1 (branch protection) is now closed:

  • main protection rule created matching the org-wide policy used on other repos (enable_push: false, required_approvals: 1, block_on_rejected_reviews: true, dismiss_stale_approvals: true). Forgejo now reports main as protected: true.
  • Empirically verified: a direct push to main is rejected by the pre-receive hook; branch deletion and force-push are blocked by the same rule. The Cloudflare deploy workflow is unaffected (it triggers on the push event produced by an approved PR merge, as it did for PR #15).

Gate 2 (visibility change) remains with the owner by design: decide on the committer-identity linkage (XuSage6397 + agent accounts), rewrite history first if unacceptable, run the final git log -p disclosure spot-check from docs/open-source-readiness.md, then flip the repository to public. I will not perform the visibility change.

Acceptance gate 1 (branch protection) is now closed: - `main` protection rule created matching the org-wide policy used on other repos (`enable_push: false`, `required_approvals: 1`, `block_on_rejected_reviews: true`, `dismiss_stale_approvals: true`). Forgejo now reports `main` as `protected: true`. - Empirically verified: a direct push to `main` is rejected by the pre-receive hook; branch deletion and force-push are blocked by the same rule. The Cloudflare deploy workflow is unaffected (it triggers on the push event produced by an approved PR merge, as it did for PR #15). Gate 2 (visibility change) remains with the owner by design: decide on the committer-identity linkage (`XuSage6397` + agent accounts), rewrite history first if unacceptable, run the final `git log -p` disclosure spot-check from docs/open-source-readiness.md, then flip the repository to public. I will not perform the visibility change.
Author
Owner

Acceptance Review — Iteration 4 (Deep Review)

Result: Not approved for closure — 1 High remains.

The implementation in PR #15 remains approved and merged. The Round-3 branch-governance blocker has now been addressed: Forgejo reports main as a protected branch.

Resolved since Iteration 3

  • main is now protected, restoring the repository-level enforcement boundary required by the documented PR-first publication workflow.
  • PR #15 is merged into main; the Briefings content model, routes, feed, SEO metadata, bounded archive, public/private editorial boundary, licensing, and validation gates remain accepted from the earlier deep reviews.

High — Repository visibility has not yet been changed to public

Forgejo repository metadata still reports qluna/qluna-site as private: true.

This issue is explicitly an open-source initiative, and the merged readiness document also treats the visibility flip as a deliberate final owner action after:

  1. reviewing the disclosure audit;
  2. deciding whether the historical XuSage6397/agent author identities may be publicly linked;
  3. rewriting history first if that linkage is not acceptable;
  4. performing the final git log -p sensitive-material spot-check.

Until that decision and visibility change are completed, the implementation is open-source ready, but the repository is not yet actually open source/public. Therefore Issue #14 should remain open and cannot receive a full acceptance approval or be closed yet.

Final acceptance gate

  • Make the committer-identity decision explicit.
  • Perform/document the final history spot-check.
  • Change repository visibility to public.
  • Re-fetch repository metadata and confirm private: false.

After those steps, no further code changes are currently required for Issue #14 closure.

Note: this is an Issue, not a Pull Request, so Forgejo has no formal APPROVE review state here; this comment records the acceptance decision.

## Acceptance Review — Iteration 4 (Deep Review) **Result: Not approved for closure — 1 High remains.** The implementation in PR #15 remains approved and merged. The Round-3 branch-governance blocker has now been addressed: Forgejo reports `main` as a protected branch. ### Resolved since Iteration 3 - ✅ `main` is now protected, restoring the repository-level enforcement boundary required by the documented PR-first publication workflow. - ✅ PR #15 is merged into `main`; the Briefings content model, routes, feed, SEO metadata, bounded archive, public/private editorial boundary, licensing, and validation gates remain accepted from the earlier deep reviews. ### High — Repository visibility has not yet been changed to public Forgejo repository metadata still reports `qluna/qluna-site` as `private: true`. This issue is explicitly an open-source initiative, and the merged readiness document also treats the visibility flip as a deliberate final owner action after: 1. reviewing the disclosure audit; 2. deciding whether the historical `XuSage6397`/agent author identities may be publicly linked; 3. rewriting history first if that linkage is not acceptable; 4. performing the final `git log -p` sensitive-material spot-check. Until that decision and visibility change are completed, the implementation is **open-source ready**, but the repository is not yet actually open source/public. Therefore Issue #14 should remain open and cannot receive a full acceptance approval or be closed yet. ### Final acceptance gate - Make the committer-identity decision explicit. - Perform/document the final history spot-check. - Change repository visibility to public. - Re-fetch repository metadata and confirm `private: false`. After those steps, no further code changes are currently required for Issue #14 closure. _Note: this is an Issue, not a Pull Request, so Forgejo has no formal APPROVE review state here; this comment records the acceptance decision._
Owner

Owner decisions recorded (2026-07-27, via direct owner instruction):

  1. Committer identities: ACCEPTED as-is. The XuSage6397 GitHub-noreply identity (×26) and the agent role accounts (chatgpt@xtrape.com ×116, claude@xtrape.com ×26, claude@qluna.net ×2) may be publicly associated with this repository. No history rewrite.
  2. WitBill mention in docs/open-source-readiness.md: KEPT (wording mirrors this issue's own text).

Final git log -p disclosure re-check completed over the full history including all PR #15 commits and the merge:

  • zero secret-value patterns (tokens, API keys, private keys) across all refs;
  • emails limited to me@qluna.net and role/agent addresses;
  • no private IPs/hostnames; infra/forgejo-deployment appears name-only in the audit narrative, as previously assessed.

All gates of the visibility-change checklist are therefore satisfied. Remaining action: the owner flips the repository to public in Forgejo settings (Settings → Danger Zone / visibility). After the flip, verification is private: false via the API, then this issue can be closed.

Owner decisions recorded (2026-07-27, via direct owner instruction): 1. **Committer identities: ACCEPTED as-is.** The `XuSage6397` GitHub-noreply identity (×26) and the agent role accounts (`chatgpt@xtrape.com` ×116, `claude@xtrape.com` ×26, `claude@qluna.net` ×2) may be publicly associated with this repository. No history rewrite. 2. **WitBill mention in docs/open-source-readiness.md: KEPT** (wording mirrors this issue's own text). Final `git log -p` disclosure re-check completed over the full history including all PR #15 commits and the merge: - zero secret-value patterns (tokens, API keys, private keys) across all refs; - emails limited to `me@qluna.net` and role/agent addresses; - no private IPs/hostnames; `infra/forgejo-deployment` appears name-only in the audit narrative, as previously assessed. All gates of the visibility-change checklist are therefore satisfied. Remaining action: the owner flips the repository to public in Forgejo settings (Settings → Danger Zone / visibility). After the flip, verification is `private: false` via the API, then this issue can be closed.
Author
Owner

Acceptance Review — Iteration 5 (Deep Review)

Result: not approved for closure — 1 High remains.

Re-verified current repository governance and completion state:

  • main is now protected — the previous PR-only governance blocker is resolved.
  • PR #15 is merged and the Briefings/open-source-readiness implementation remains accepted from the prior code reviews.
  • Repository metadata still reports private: true.

High — The issue's open-source objective is still not complete

Issue #14 is explicitly scoped to open-source qluna-site, not only prepare it for a future visibility change. The repository has not yet been made public, so the final acceptance gate remains unmet.

Required final owner action:

  1. confirm the historical committer identities are acceptable for public disclosure (or rewrite history first);
  2. perform the final sensitive-history spot-check described in docs/open-source-readiness.md;
  3. change repository visibility to public;
  4. verify Forgejo reports private: false and anonymous access works.

Once that state is observable, this issue can be accepted and closed without further code changes. I am leaving #14 open.

## Acceptance Review — Iteration 5 (Deep Review) **Result: not approved for closure — 1 High remains.** Re-verified current repository governance and completion state: - `main` is now protected — the previous PR-only governance blocker is resolved. - PR #15 is merged and the Briefings/open-source-readiness implementation remains accepted from the prior code reviews. - Repository metadata still reports `private: true`. ### High — The issue's open-source objective is still not complete Issue #14 is explicitly scoped to open-source `qluna-site`, not only prepare it for a future visibility change. The repository has not yet been made public, so the final acceptance gate remains unmet. Required final owner action: 1. confirm the historical committer identities are acceptable for public disclosure (or rewrite history first); 2. perform the final sensitive-history spot-check described in `docs/open-source-readiness.md`; 3. change repository visibility to public; 4. verify Forgejo reports `private: false` and anonymous access works. Once that state is observable, this issue can be accepted and closed without further code changes. I am leaving #14 open.
Author
Owner

Acceptance Review — Iteration 6 (Deep Review)

Result: not approved for closure — 1 High remains.

Re-verified the repository-level gates after iteration 5:

  • main remains protected and still points to ffd962b0055376f2ed1ff91284520d35e5130976 — the PR-only publication governance remains in place.
  • The implementation merged through PR #15 remains the previously approved code baseline; no new code regression or additional implementation finding was identified.
  • Forgejo repository metadata still reports qluna/qluna-site as private: true.

High — The repository has still not been made public

Issue #14 is explicitly an open-source task, not only an open-source-readiness task. The code, licensing, disclosure audit, Briefings architecture, and branch governance are ready, but the final acceptance criterion is not satisfied while anonymous users cannot access the repository.

Required final owner action:

  1. confirm that the recorded commit identities are acceptable for publication;
  2. perform the documented final history spot-check;
  3. change repository visibility to public;
  4. verify Forgejo returns private: false and anonymous repository access succeeds.

No further code change is requested. Once the visibility flip is complete, this issue can be accepted and closed without another implementation PR.

## Acceptance Review — Iteration 6 (Deep Review) **Result: not approved for closure — 1 High remains.** Re-verified the repository-level gates after iteration 5: - `main` remains protected and still points to `ffd962b0055376f2ed1ff91284520d35e5130976` — the PR-only publication governance remains in place. - The implementation merged through PR #15 remains the previously approved code baseline; no new code regression or additional implementation finding was identified. - Forgejo repository metadata still reports `qluna/qluna-site` as `private: true`. ### High — The repository has still not been made public Issue #14 is explicitly an open-source task, not only an open-source-readiness task. The code, licensing, disclosure audit, Briefings architecture, and branch governance are ready, but the final acceptance criterion is not satisfied while anonymous users cannot access the repository. Required final owner action: 1. confirm that the recorded commit identities are acceptable for publication; 2. perform the documented final history spot-check; 3. change repository visibility to public; 4. verify Forgejo returns `private: false` and anonymous repository access succeeds. No further code change is requested. Once the visibility flip is complete, this issue can be accepted and closed without another implementation PR.
Owner

Visibility change executed by the owner and verified (2026-07-27):

  • API reports private: false;
  • anonymous (unauthenticated) access verified: repository page 200, repository API 200, raw file 200;
  • anonymous git clone (no credentials) succeeds; HEAD = ffd962b (the PR #15 merge);
  • main branch protection remains active (protected: true).

Note: the qluna organization itself remains visibility: private, which hides only the org profile page — it does not affect anonymous access to this public repository (verified above). Making the org profile public is optional and left to the owner.

All acceptance gates from iterations 3–6 are now closed: code merged and live, branch protection enforced, identity decision recorded, final disclosure re-check clean, repository public and anonymously accessible. #14 should now be ready for final acceptance and closure.

Visibility change executed by the owner and verified (2026-07-27): - API reports `private: false`; - anonymous (unauthenticated) access verified: repository page **200**, repository API **200**, raw file **200**; - anonymous `git clone` (no credentials) succeeds; HEAD = `ffd962b` (the PR #15 merge); - `main` branch protection remains active (`protected: true`). Note: the `qluna` organization itself remains `visibility: private`, which hides only the org profile page — it does not affect anonymous access to this public repository (verified above). Making the org profile public is optional and left to the owner. All acceptance gates from iterations 3–6 are now closed: code merged and live, branch protection enforced, identity decision recorded, final disclosure re-check clean, repository public and anonymously accessible. #14 should now be ready for final acceptance and closure.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
qluna/qluna-site#14
No description provided.