fix(website): simplify downloads and scope product releases (#390)

## Problem and outcome

Website visitors can download the usual Windows x64, macOS Apple silicon
and Linux x64 App packages directly from clearly labeled platform cards.
Each card includes a verified Gitee alternative, with shared setup
guidance and a More downloads link for the full release list. The
homepage reuses the application's 20 bilingual greetings, and the sample
game no longer displays an invented title.

Website builds resolve links from the latest published GitHub release
and validate matching mirror assets. Website deployment follows main CI
so newly published packages reach the next site build. Version selection
and release notes now share a product-change filter: standalone website,
documentation and maintenance changes do not create App/Server releases
or affect the next product version.

## Verification

- `npm run check`: 57 test files / 759 tests, TypeScript and product
production build passed.
- Website build passed with real GitHub/Gitee v1.0.0 metadata and with
the explicit local fallback.
- English and Chinese browser checks at 390px and 1440px passed:
platform links, More downloads, greeting selection and language
switching.
- All 23 website film check groups passed; the final shared artwork
change rebuilt successfully.
- Documentation, repository hygiene and diff checks passed. Real
Git-history tests cover product/website mixtures and moves across the
release boundary; the accepted phase plans `publish: false`.

## Impact

GitHub remains the version authority; Gitee is a download mirror.
Unavailable mirror metadata falls back to its release page. Product
runtime behavior and package compatibility are unchanged. Physical
macOS/Linux capture and broader device/network limits remain documented.
This commit is contained in:
AAA authored and GitHub committed 2026-09-12 23:01:48 +08:00
1 parent f92162b3bb
commit 4ff970f483
24 files changed
+429 -157

No files matched your search

+7 -4
View File
@@ -71,8 +71,8 @@ understandable; a genre label or a score burst does not replace the action.
Use mint walls, clear control edges, a warm orange/yellow sofa and the curious TV
mascot. The site is a welcoming room, not a monitoring dashboard. Keep one
primary action, native navigation and short instructions. English is the first
view with an explicit Chinese choice; theme follows the system unless changed.
primary action, native navigation and short instructions. Language and theme
follow the system unless explicitly changed; unsupported languages use English.
Respect reduced motion and retain useful content without JavaScript.
The room illustration cycles through four distinct uses: an RPG, drawing,
@@ -133,8 +133,11 @@ are not automatically included in the website artifact.
The [website operations guide](../operations/website.md) owns Pages publication,
public destinations and the separate P2P-only demo. The primary action leads
to the platform download section. Use permanent release-page links for downloads;
archive names include a revision. Verify destinations as part of publication.
to the platform download section. Build static package links from a published
GitHub release, showing its version and each supported platform. Gitee links must
match that release and its source revision. Keep release notes separate; when a
package is unverified, label the fallback as a release-page link. Archive names
include a revision. Verify destinations as part of publication.
Demo, App and existing-site walkthroughs
use real action names and explain the first sharing and viewing steps. Keep
platform requirements and connection limitations beside the relevant steps.
+7 -5
View File
@@ -30,9 +30,11 @@ copy and repository visibility; finish main protection. Then set repository
Actions variable `PIIK_RELEASES_ENABLED` to `true`. This is a repository setting,
not an environment variable for Piik App or Server.
Subsequent accepted PRs merged to main use the existing CI workflow: calculate
one version, validate, package Server and all App targets, and publish the same
artifacts. Runs queue rather than overlap or cancel one another. Branches/PRs
Subsequent accepted PRs merged to main use the existing CI workflow. Product
changes calculate one version, validate, package Server and all App targets,
and publish the same artifacts. Standalone website/docs changes validate without
packaging or releasing; [versioning](../reference/versioning.md#automatic-publication)
owns that boundary. Runs queue rather than overlap or cancel one another. Branches/PRs
stay quiet; manual `client_checks` dispatch remains available for candidates.
Writing a new version back to main is unnecessary and prohibited.
@@ -84,8 +86,8 @@ Use the release's actual version and full `target_commitish` SHA, with
`GITEE_TOKEN` supplied through the publisher environment. `--dry-run` after the
three arguments checks local identity, checksums and attachment sizes without
publishing. The [release-source policy](../reference/versioning.md#release-sources)
owns provenance, selection and quota limits. Small-file upload/download acceptance
has passed; full-package mirror acceptance remains part of release readiness.
owns provenance, selection and quota limits. The first public release passed
complete matching Server and three-platform App mirror download acceptance.
## Platform References
+24 -9
View File
@@ -14,8 +14,10 @@ its content and design boundary.
| Download mirror for domestic access | [Gitee Releases](https://gitee.com/TNTcraftHIM/Piik/releases) |
| Documentation index | [Repository documentation](../README.md) |
The introduction is prepared with these links. DNS, deployment and release
publication must be verified when publishing.
These public destinations are live. GitHub Pages serves `piik.tv` behind
Cloudflare; both the GitHub origin and Cloudflare edge use HTTPS. Website DNS is
proxied with strict origin TLS verification and origin cache headers respected.
Demo DNS remains unproxied so its UDP listeners stay reachable.
GitHub Pages can serve the complete website: it hosts
[static HTML, CSS and JavaScript](https://docs.github.com/en/pages/getting-started-with-github-pages/what-is-github-pages).
@@ -71,7 +73,16 @@ film's real product components into an isolated demonstration frame; publishing
ranges for seeking the soundtrack. Keep asset links relative so both a custom
domain and GitHub's `/Piik/` project path work.
## Publish when approved
Downloads are static links to the latest published GitHub packages, with explicit
Windows x64, macOS Apple silicon and Linux x64 cards. `PIIK_WEBSITE_RELEASE_DATA`
can point the build at a temporary JSON containing the GitHub release and the
same-tag Gitee release with its attachment list. CI supplies this input; the
builder validates version, source identity and platform URLs. A missing/incomplete
GitHub release fails deployment, preserving the current site. An unavailable
mirror retains a labeled release-page link. Local builds without metadata use
release-page links as well; no visitor API call or hard-coded package SHA is needed.
## Publish
1. Verify the public copy and destinations above, publish the release artifacts
and open the source repository as part of the approved public launch.
@@ -81,13 +92,17 @@ domain and GitHub's `/Piik/` project path work.
3. Set the approved `piik.tv` custom domain in Pages settings and configure its
DNS using GitHub's [current domain instructions](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site).
Actions publishing does not need a `CNAME` file in the source tree.
4. Dispatch **Website** from `main` after the reviewed site is merged. The
workflow builds and uploads only `build/site/`; no App/Server packaging is run. Verify the
domain, HTTPS, both languages, relative asset paths and primary links.
4. Accepted main pushes run CI first; its completion triggers **Website**, which
checks out current main and reads the latest published download metadata.
Waiting for CI includes its package publication and mirror attempt, so the
page picks up the resulting release. A CI failure leaves downloads pointing
to the latest successful public release. Manual **Website** dispatch from
`main` can refresh links after an operator publication or mirror retry.
Only `build/site/` is uploaded; website work does not package App/Server.
Verify HTTPS, both languages, relative assets and per-platform download links.
There is no automatic deployment on branch pushes. The workflow is prepared,
but writing it does not enable Pages or change DNS. The private production
site and the US P2P-only demo remain separate deployments.
Branch/PR pushes do not deploy. The workflow does not change DNS; the private
production site and the US P2P-only demo remain separate deployments.
For rollback, dispatch the previously accepted site revision from a reviewed
revert on `main`; runtime App/Server binaries and databases are unaffected.
+33 -32
View File
@@ -1,10 +1,9 @@
# Versions And Compatibility
Reviewed 2026-09-12. Release identity, update comparisons and descriptive metadata
rules are implemented; the public compatibility promise starts with the first
declared public release. Use `v1.0.0` for it, with one product version for App,
Server and the embedded Web build, plus the full Git SHA for source provenance.
Automatic publication remains disabled until the readiness boundary below.
Reviewed 2026-09-12. `v1.0.0` is the declared public compatibility baseline.
App, Server and the embedded Web build share one product version, plus the full
Git SHA for source provenance. [Status](../status.md) owns the current publication
state; automatic publication follows the product-change boundary below.
## Give Each Identifier One Job
@@ -101,16 +100,27 @@ identity separately. Stable update notices ignore prereleases.
## Automatic Publication
After one-time activation, a complete squash PR merged to main runs the existing
CI and packaging pipeline. `scripts/release-version.mjs` examines unreleased
first-parent commit messages: `feat` selects minor, `!` or `BREAKING CHANGE`
selects major, and other accepted changes select patch. The first release is
`v1.0.0`. PR/commit naming is owned by [CONTRIBUTING](../../CONTRIBUTING.md#commit-pr-and-branch-names).
CI pipeline. `scripts/release-version.mjs` filters unreleased first-parent
commits by actual changed paths. Website/film, documentation, research, agent
instructions and standalone maintenance tools do not create product versions.
Shared product UI, runtime code, public assets, licenses, dependencies and
packaging inputs remain eligible; unknown paths are treated as product inputs.
The script owns the exclusion list, shared with release-note generation.
Only eligible commit messages select the increment: `feat` selects minor,
`!` or `BREAKING CHANGE` selects major, and other accepted product changes select
patch. A website-only `feat` cannot increase the next product version. Earlier
unpublished product changes remain eligible when a later website commit reaches
main. PR/commit naming is owned by [CONTRIBUTING](../../CONTRIBUTING.md#commit-pr-and-branch-names).
Code size or an internal refactor does not itself imply a breaking release.
No version/changelog commit is written back to main. The workflow queues main
runs, uses the same source SHA for Server and all App targets, and publishes only
after all required artifacts and checks pass. The publisher verifies matching
version, source SHA and checksums, then creates/uploads/publishes one GitHub draft.
When there are no unpublished product changes, CI validates a development build
and skips packaging and publication; it never assigns an old release version to
a new source SHA. The separate Website workflow updates the static site after CI.
Failed draft uploads can resume; published artifacts are never overwritten.
An older draft retried after a newer release cannot take over `latest`.
@@ -129,19 +139,22 @@ introduced by this policy.
## Release Notes
GitHub Releases owns the published changelog. Each accepted PR supplies reviewed
GitHub Releases owns the published changelog. Each product-changing PR supplies reviewed
Chinese and English user-facing copy under the exact `## Release notes` heading
in its squash commit; `###` headings structure that copy. Explain benefits,
fixes and required upgrade actions, including breaking changes. Keep internal
work logs, audit handoffs and unverified claims outside this public section.
`scripts/release-notes.mjs` collects these sections from all unreleased
first-parent commits since the previous stable tag. The first release uses
`scripts/release-notes.mjs` collects these sections from the same eligible
first-parent commits since the previous stable tag. Standalone website and
documentation phases need no product release notes. The first release uses
only its launch commit's product introduction; private development history is
not a launch changelog. Missing, empty or duplicate sections fail validation
before packaging/publication. GitHub Actions shows the generated text in its
run summary. A manual candidate with an explicit version also previews it, so
prepare its commit text before dispatching a release rehearsal.
prepare its commit text before dispatching a release rehearsal. A manual
candidate with no product changes may still be built; its summary reports that
there are no product release notes, and publication remains disabled.
The publisher passes the same text through a temporary notes file to GitHub,
then removes that file. Gitee copies the GitHub description. Retrying the same
@@ -189,29 +202,17 @@ Gitee currently documents 100 MB per attachment and 1 GB total repository
attachments for ordinary projects. The mirror rejects files above 100,000,000
bytes before writing. Check aggregate capacity before each release; exhausted
storage leaves a pending preview rather than deleting older downloads.
Target authentication, uploads, anonymous metadata/CORS and a small download's
SHA-256 have been verified. Acceptance of the full matching release packages
remains pending with the first public release.
Target authentication, uploads, anonymous metadata/CORS and the complete matching
Server/three-platform App downloads and SHA-256 checks passed for the public release.
Use API metadata in the Browser; ordinary asset-link redirects are not guaranteed
to permit cross-origin fetch, even when a normal download works.
## First Public Release Readiness
## Public Release Baseline
The current private single-contract rule remains until this boundary is ready:
1. Accept real target packages and the queued GitHub publication path before
enabling automatic releases. Current local checks exercise planning, identity
injection, update decisions and publisher failure/retry paths without publishing.
2. Freeze the first public baseline and explicit feature-support rules after
checking the implemented discovery and descriptive-metadata behavior above.
3. Exercise the first supported old/new App-Site pair in both directions,
a stale open page, incompatible-contract recovery and retained room/config
authority. Bundled capture checks remain within their existing package gate.
4. Freeze the supported baseline and release notes, then explicitly declare
`v1.0.0`. Do not manufacture compatibility by merely renumbering private builds.
These implementation tasks are tracked in [TODO](../todo.md). Their absence is
a public-release gap, not evidence that the current matched private build fails.
The declared `v1.0.0` release starts the compatibility promise above. Its packages,
reviewed notes and descriptors are immutable. Subsequent releases preserve this
baseline through compatible upgrades; the remaining physical device/network
limits stay in [verification status](../verification-status.md).
## References
+13 -12
View File
@@ -38,23 +38,24 @@ media remain process-only. This private service is not a public demonstration.
The separate US [public demo](https://demo.piik.tv) is deployed with open site
entry, persistent room authority and P2P-only media. Caddy owns HTTPS, and the
standard systemd service runs the verified Server test candidate. Public DNS,
standard systemd service runs the published Server package. Public DNS,
HTTPS, runtime assets, all three STUN listeners and a bounded browser P2P
sharing/stop check passed; the browser check used synthetic video on one network.
The operator record owns exact identity and postflight evidence.
[TODO](./todo.md) owns remaining publication work. The owner accepted the public
introduction and authorized launch on 2026-09-12. The source repository is public,
main protection is active, and GitHub Pages is configured for `piik.tv`. The
private service remains a separate deployment. Release descriptors and GitHub
deployment records identify published artifacts and website revisions.
[TODO](./todo.md) owns the current maintenance phase. The owner declared the first
public release on 2026-09-12. Source is public, main protection is active, and
`piik.tv` runs on GitHub Pages behind Cloudflare with HTTPS. The private service
remains a separate deployment. Release descriptors and GitHub deployment records
identify published artifacts and website revisions.
The Windows test archive passed complete anonymous Gitee download, checksum,
App entry/presentation and update-link acceptance. Bounded two-build
interoperability also passed. The complete publisher rehearsal previously hit
the private repository's Actions artifact quota and must complete on the public
repository before package publication. GitHub/Gitee release comparison, mirror
publishing and PR-sourced release notes are implemented under
The matching Server and three App packages are published on GitHub and Gitee;
anonymous mirror downloads match the original checksums. Public-repository CI
and native packaging passed. App entry, update links
and bounded two-build interoperability have acceptance evidence. Accepted
product changes publish automatically; standalone website and documentation
changes validate and deploy the website without creating App/Server versions.
GitHub/Gitee release comparison, mirror publishing and PR-sourced notes follow
[versioning](./reference/versioning.md). [Verification status](./verification-status.md#candidate-evidence-boundary)
owns the remaining physical limits; shared lessons live in
[engineering](./reference/engineering.md).
+4 -22
View File
@@ -7,30 +7,12 @@ history. A parked idea is not implementation authority.
## Now
- [ ] **Release and repository readiness.** Review the prepared Windows test
candidate. Run native CI on the now-public repository, then
rehearse the publisher with genuine matching Server and App packages. Old cloud
artifacts have already been removed; if quota rejection persists, inspect
account billing and Packages usage with credentials that can read those scopes.
Run the final source's required regression checks, prepare one coherent squash
PR, accept the [first public release](./reference/versioning.md#first-public-release-readiness),
and finish [publishing activation](./operations/github.md).
Test-candidate checks do not accept the public release. Keep the owner's
- [ ] **Post-launch monitoring.** Collect App/Server feedback and verify the
public download path after product releases. Preserve the owner's
[device/network deferrals](./verification-status.md#candidate-evidence-boundary).
- [ ] **Gitee package acceptance.** The public README mirror, publisher secret,
upload pipeline and App/Server update fallback are implemented. The complete
Windows test archive passed anonymous download, checksum and App entry
acceptance. Verify the complete matching Server and three-platform
App release, total attachment capacity and real update/download flow
under the [release model](./reference/versioning.md#release-sources) before launch.
- [ ] **Website launch.** Publish the accepted website through GitHub Pages
and verify piik.tv under
[website operations](./operations/website.md). Verify all public destinations,
including the deployed password-free, P2P-only demo.piik.tv;
the current private production service remains private.
Keep implementation on the existing phase branch. Main and the private service stay
unchanged until the related acceptance and delivery actions are complete.
Keep fixes on a maintenance branch until acceptance. The public release is the
compatibility baseline; private service deployment stays independent.
## Next: P2P Connection And Feedback Review
+5 -6
View File
@@ -1,6 +1,6 @@
# Verification Status
Last updated: 2026-09-11
Last updated: 2026-09-12
This file owns physical evidence limits that change how the product may be
described. [Status](./status.md) owns the execution/deployment index.
@@ -57,11 +57,10 @@ Linux release archives. Process replacement used a forced stop on Windows and
does not promise uninterrupted media. It does not cover game/audio endurance,
storage faults, the wider device/network matrix or Go race detection.
The full publisher dry run with genuine matching target artifacts remains
unverified. The native CI candidate run passed validation and Server packaging
but hit the Actions artifact-storage quota before App jobs could start. Native
macOS tooling remains necessary. [TODO](./todo.md) owns the remaining publisher
rehearsal and owner acceptance; the broader platform deferrals below still apply.
The first public release passed real Server/three-platform App packaging and
GitHub/Gitee publication, including anonymous mirror checksum verification.
These packaging checks do not establish physical macOS/Linux capture or expand the device/network evidence
below. [Status](./status.md) owns current publication and activation state.
## Remaining Device And Network Acceptance