mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
Replace UI DispatcherTimer polling with a StudySnapshotRenderGate across multiple widgets to queue and apply only the latest analytics snapshot; components updated include StudyDeductionReasonsWidget, StudyEnvironmentWidget, StudyInterruptDensityWidget, StudyNoiseCurveWidget. Add StudySnapshotRenderGate implementation to coordinate rendering and monitoring leases and update subscription/lease lifecycle handling (subscribe/unsubscribe, Acquire/Dispose leases, Clear/Dispose gate). Rewrite chart controls (StudyNoiseCurveChartControl and StudyNoiseDistributionScatterChartControl) to use stable logical-time origins, split series into static vs dynamic tails, add geometry/sample caching, stable jitter/coordinate mapping helpers, and expose internal helpers & counts for testing. Add unit tests (StudyComponentRenderingTests) covering the render gate and chart behaviors (layer counts, logical X mapping, stable jitter, cache rebuild). These changes improve rendering correctness and performance by avoiding redundant renders and enabling deterministic chart layout.
2.5 KiB
2.5 KiB
PDC Incremental Update Migration
Goal
Replace VeloPack-based incremental packaging with a unified PDC FileMap + object-repo pipeline, while keeping Launcher installation, rollback, and update orchestration ownership unchanged.
Stage 1 (Completed)
- Release workflow removed VeloPack-based release packaging.
- Signed FileMap path was restored as an interim release mechanism.
- Host/Launcher fallback behavior stayed compatible with
files.json + files.json.sig + update.zip.
Stage 2 (Current Implementation Target)
- Use GitHub Actions PloNDS static publishing as the active incremental path.
- Keep
phainon.ymlfor future PDCC parity, but do not rely on PDCC for the current release flow. - Promote PloNDS-distributed FileMap/object-repo as the primary incremental path.
- Keep GitHub Release installers and metadata as parallel distribution.
- Keep Launcher state machine ownership (
.current/.partial/.destroy+ snapshots). - Check updates in order: NS3/PloNDS static source, GitHub Release PloNDS assets, then GitHub full installer.
- S3 object root is fixed to
lanmountain/update/with no update-system version prefix. - Public object URLs come from
S3_PUBLIC_BASE_URL; do not infer them fromS3_ENDPOINTandS3_BUCKET.
Expected S3 layout:
lanmountain/update/repo/sha256/<hash-prefix>/<hash-object>lanmountain/update/meta/channels/<channel>/<platform>/latest.jsonlanmountain/update/meta/distributions/<distributionId>.jsonlanmountain/update/manifests/<distributionId>/plonds-filemap.jsonlanmountain/update/manifests/<distributionId>/plonds-filemap.json.siglanmountain/update/installers/<platform>/<version>/*
Acceptance
release.ymlcontains no Velopack steps; PloNDS static publishing is handled byplonds-build.ymlandddss-publish.yml.- Release jobs keep building installers for Windows x64/x86, Linux x64, and macOS.
- PloNDS metadata + FileMap + object repo are published under
lanmountain/update/. - Host can consume the NS3/PloNDS static payload and fallback to GitHub when unavailable.
- Launcher can apply both:
- legacy signed
files.json + update.zip - PloNDS FileMap object-repo payload.
- legacy signed
- Rollback semantics keep both automatic failure rollback and manual rollback after a successful update.
Deprecated Notes
- The following interim outputs are compatibility-only (not the long-term primary path):
files-windows-x64.json/.sig/update-windows-x64.zipfiles-windows-x86.json/.sig/update-windows-x86.zipfiles-linux-x64.json/.sig/update-linux-x64.zip