diff --git a/.github/DISCUSSION_TEMPLATE/q-a.yml b/.github/DISCUSSION_TEMPLATE/q-a.yml index fe91431..870d4cb 100644 --- a/.github/DISCUSSION_TEMPLATE/q-a.yml +++ b/.github/DISCUSSION_TEMPLATE/q-a.yml @@ -23,7 +23,7 @@ body: attributes: label: Version description: Relevant release, build, commit, or branch, if known. - placeholder: e.g. 0.0.16-rc.4, develop, or commit SHA + placeholder: e.g. 0.0.1; include the build commit SHA when available - type: input id: environment diff --git a/.gitignore b/.gitignore index 26b6719..a980c54 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ node_modules/ docs/.vitepress/cache/ docs/.vitepress/dist/ +dist/ *.log .DS_Store Thumbs.db diff --git a/.openai/hosting.json b/.openai/hosting.json new file mode 100644 index 0000000..409fc60 --- /dev/null +++ b/.openai/hosting.json @@ -0,0 +1,6 @@ +{ + "project_id": "appgprj_6a9afc0c8bd08191a8755ee6cd67ef09", + "static": { + "directory": "dist" + } +} diff --git a/CONTENT_SYNC.md b/CONTENT_SYNC.md new file mode 100644 index 0000000..56bb9c2 --- /dev/null +++ b/CONTENT_SYNC.md @@ -0,0 +1,36 @@ +# Content synchronization baseline + +Public guides were checked on 2026-09-09 against freshly fetched GitHub `main` revisions. None of the three product repositories has a `master` branch. Source was read from immutable Git archives, excluding develop, feature branches and uncommitted changes. In particular, the client checkout contains ongoing uncommitted work and the panel checkout is on a feature branch; neither is the documentation baseline. + +| Repository | Main revision | +| --- | --- | +| core | `503229562ef5854e3be6be3a9c8e7cbc5efffc61` | +| znet-sink | `6d822fb96140be87cdccdd0bea472ba0b089cf04` | +| zboard | `e1b7246cc4ef805bf39b22d634ba209114eb3b14` | +| docs develop before this update | `8e00ddfeec94707c1c2dd2d587f68ed23386c3ef` | + +GitHub release API responses confirmed public, non-draft, non-prerelease `v0.0.1` releases for all three products. This verifies publication, not installed behavior or every main change in a downloaded artifact. The public [implementation progress page](docs/progress.md) links the pinned evidence and release records. + +## Evidence and changes + +- Core: inspected `crates/config/src/model/route.rs`, route compilation/validation, `crates/engine/src/runtime/route.rs`, `crates/proxy/src/adapters/direct/{inbound,udp}.rs`, and management, validation-isolation and URLTest implementation notes/test references. Added `route.bypass` precedence, management-only startup, Direct UDP capability and bind semantics, validation isolation, and the distinction between policy probes and read-only diagnostics. Corrected the old Direct UDP matrix entry and develop-only version notices. +- Client: inspected `src-tauri/src/services/bypass.rs`, `services/bypass/rules.rs`, `services/kernel_settings.rs`, `models/app_config.rs`, Network/TUN settings components, kernel integration and v0.0.1 qualification records. Updated the shared bypass editor, TUN exclusions, portable settings v2, lifecycle semantics and the shared 0.0.1 installation/recovery baseline. The four-platform installed-E2E waiver remains an outstanding acceptance boundary. +- Panel: inspected `backend/internal/handler/{admin_order_assignment,node_publish_worker,node_delete_cascade,dns_deletion,certificate_deletion,network_entry_delivery,network_entry_capabilities,managed_rule_client_compatibility,kernel_automation}.go`, related tests and implementation notes. Updated fronting and explicit landing authorization, shared proxy pools, durable publication, administrator order confirmation, client-specific rules, the shared 0.0.1 capability baseline, and database-only deletion versus independent remote cleanup. The compiler still injects a bootstrap listener even though Core now supports management-only operation. +- Release and scope records distinguish existing main implementation from plans, including panel online payment/plugin runtime and product installed/long-running acceptance. No product code, live network settings or remote node state was changed. + +## Version terminology + +All three product versions are 0.0.1. Public guides no longer use pre-reset release matrices, minimum-version thresholds, package names or User-Agent examples. Git tags, download URLs and image tags retain the actual `v0.0.1` spelling. API V1, client settings v2 and ZRS 0.1 remain independent protocol/data-format versions. The public compatibility page describes the current 0.0.1 contract rather than reconstructing historical release claims. + +## Verification + +- `pnpm check:build` passed for 69 Markdown pages: links, anchors, JSON examples, project boundaries, navigation, reachability and production output. Local tools were Node 24.19.0 and pnpm 11.19.0; repository CI independently uses Node 22 and pnpm 11.9.0. +- `git diff --check` passed. The progress page and three project entry pages contain 23 pinned source references, checked against the archived trees. +- The final `/progress` development route returned HTTP 200. No browser visual acceptance was performed. +- Existing dependencies were reused; the package manifest, lockfile and hosting/workflow configuration remain unchanged; the discussion question template now uses the 0.0.1 example. + +This task did not run Rust/Go product suites, installed clients, live TUN changes, payment/email delivery or node cleanup. + +## Delivery + +The target is docs `develop` through a `codex/*` pull request. Current GitHub branch rules require a pull request and the `validate` status check. GitHub Pages listens to develop pushes; this documentation PR does not itself deploy a product or publish the separate Sites preview. diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 27162b8..3a406a5 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -28,6 +28,12 @@ export default defineConfig({ ], themeConfig: { + logo: { + light: '/brand/zerodenet-light.png', + dark: '/brand/zerodenet-dark.png', + alt: 'ZeroDeNet', + }, + siteTitle: false, nav, sidebar, search: { diff --git a/docs/.vitepress/navigation.ts b/docs/.vitepress/navigation.ts index e77020c..d6ded2c 100644 --- a/docs/.vitepress/navigation.ts +++ b/docs/.vitepress/navigation.ts @@ -9,10 +9,12 @@ const group = ( ): DefaultTheme.SidebarItem => ({ text, items, collapsed }) export const nav: DefaultTheme.NavItem[] = [ + { text: '下载客户端', link: '/download' }, { text: '项目', items: [ { text: '全部项目', link: '/projects/' }, + { text: '实现与文档进度', link: '/progress' }, { text: '客户端', items: [ @@ -46,6 +48,7 @@ export const nav: DefaultTheme.NavItem[] = [ const solutionSidebar: DefaultTheme.SidebarItem[] = [ page('使用场景', '/solutions/'), + page('实现与文档进度', '/progress'), group('项目', [ page('全部项目', '/projects/'), page('ZNet Sink', '/projects/znet-sink/'), @@ -67,6 +70,7 @@ const coreSidebar: DefaultTheme.SidebarItem[] = [ page('安装与构建', '/projects/core/guides/installation'), page('启动第一个节点', '/projects/core/guides/quickstart'), page('配置基础', '/projects/core/guides/configuration-basics'), + page('运行 TUN 与 DNS', '/projects/core/guides/tun-and-dns'), ], false), group('日常管理', [ page('运行与观测', '/projects/core/guides/operations'), @@ -90,6 +94,7 @@ const coreSidebar: DefaultTheme.SidebarItem[] = [ page('参考入口', '/projects/core/reference/'), page('能力与端口速查', '/projects/core/reference/technical-specifications'), page('配置字段', '/projects/core/configuration/'), + page('DNS 与 Fake-IP 参数', '/projects/core/configuration/dns'), page('运行模式与出站组', '/projects/core/configuration/modes-and-groups'), page('构建特性', '/projects/core/configuration/features'), page('控制接口总览', '/projects/core/control-plane/'), @@ -118,6 +123,9 @@ const sinkSidebar: DefaultTheme.SidebarItem[] = [ group('功能说明', [ page('功能总览', '/projects/znet-sink/guides/features'), page('订阅管理', '/projects/znet-sink/guides/subscriptions'), + page('DNS 与 Fake-IP', '/projects/znet-sink/guides/dns'), + page('TUN 接管与网络切换', '/projects/znet-sink/guides/tun'), + page('迁移设置与管理内核', '/projects/znet-sink/guides/settings-transfer'), page('本地代理与节点测速', '/projects/znet-sink/guides/proxy-and-probes'), ], false), group('帮助与诊断', [ @@ -135,11 +143,15 @@ const zboardSidebar: DefaultTheme.SidebarItem[] = [ page('用户指南入口', '/projects/zboard/guides/'), page('安装与部署', '/projects/zboard/guides/installation'), page('首次初始化', '/projects/zboard/guides/first-setup'), + page('后台导航与日常运营', '/projects/zboard/guides/daily-operations'), ], false), group('功能说明', [ page('节点与协议服务管理', '/projects/zboard/guides/node-management'), page('协议服务配置', '/projects/zboard/guides/protocol-services'), + page('套餐、订单与用户交付', '/projects/zboard/guides/plans-and-orders'), page('订阅交付与流量展示', '/projects/zboard/guides/subscriptions-and-traffic'), + page('公告、注册验证与邮件', '/projects/zboard/guides/announcements-and-email'), + page('系统维护与数据库迁移', '/projects/zboard/guides/maintenance'), page('DNS 与证书管理', '/projects/zboard/guides/dns-and-certificates'), page('故障排查', '/projects/zboard/guides/troubleshooting'), ]), @@ -149,6 +161,7 @@ const zboardSidebar: DefaultTheme.SidebarItem[] = [ ] export const sidebar: DefaultTheme.Sidebar = { + '/progress': solutionSidebar, '/solutions/': solutionSidebar, '/community/': communitySidebar, '/projects/core/': coreSidebar, @@ -156,6 +169,7 @@ export const sidebar: DefaultTheme.Sidebar = { '/projects/zboard/': zboardSidebar, '/projects/': [ page('项目目录', '/projects/'), + page('实现与文档进度', '/progress'), group('应用', [page('ZNet Sink', '/projects/znet-sink/')]), group('内核', [page('Zero Core', '/projects/core/')]), group('运营平台', [page('Zboard', '/projects/zboard/')]), diff --git a/docs/.vitepress/projects.json b/docs/.vitepress/projects.json index b1f8f58..069f79c 100644 --- a/docs/.vitepress/projects.json +++ b/docs/.vitepress/projects.json @@ -10,6 +10,7 @@ "docsRoot": "/projects/znet-sink/", "quickStart": "/projects/znet-sink/guides/installation", "download": "https://github.com/zerodenet/znet-sink/releases/latest", + "downloadPage": "/download", "platforms": ["Windows", "macOS", "Linux"], "audiences": ["user", "contributor"] }, @@ -33,7 +34,7 @@ "tagline": "代理服务运营管理", "description": "基础设施、协议服务、节点组、商品、订单、订阅、配置交付和流量管理。", "kind": "application", - "status": "preview", + "status": "active", "repository": "https://github.com/zerodenet/zboard", "docsRoot": "/projects/zboard/", "quickStart": "/projects/zboard/guides/installation", diff --git a/docs/.vitepress/projects.ts b/docs/.vitepress/projects.ts index a90a885..f0af714 100644 --- a/docs/.vitepress/projects.ts +++ b/docs/.vitepress/projects.ts @@ -21,6 +21,7 @@ export interface ProjectDefinition { docsRoot: string quickStart?: string download?: string + downloadPage?: string platforms?: string[] audiences: string[] } diff --git a/docs/.vitepress/theme/components/DownloadChooser.vue b/docs/.vitepress/theme/components/DownloadChooser.vue new file mode 100644 index 0000000..c61e9bd --- /dev/null +++ b/docs/.vitepress/theme/components/DownloadChooser.vue @@ -0,0 +1,320 @@ + + + + + diff --git a/docs/.vitepress/theme/components/ProjectCatalog.vue b/docs/.vitepress/theme/components/ProjectCatalog.vue index 82fb7f5..3dea670 100644 --- a/docs/.vitepress/theme/components/ProjectCatalog.vue +++ b/docs/.vitepress/theme/components/ProjectCatalog.vue @@ -6,6 +6,9 @@ defineProps<{ compact?: boolean }>() const displayAddress = (url: string) => url.replace(/^https?:\/\//, '') const quickStartLabel = (kind: string) => kind === 'application' ? '安装与使用' : '快速开始' +const downloadHref = (project: (typeof projects)[number]) => ( + project.downloadPage ? withBase(project.downloadPage) : project.download +)