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:
24 files changed
+429
-157
No files matched your search
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user