gramps
1e3a4f7fe0
feat(entitlement): pre-release switch so Release builds can test 60 fps
...
The frame-rate boundary is correct as a product rule, but it only bites in a
Release build, where DevBuild.IsDevelopment is false and DeveloperMode cannot
unlock anything — exactly the build whose performance numbers are worth reading
(see docs/ai/environment.md: Debug pixel paths are several times slower). 60 fps
could not be tested at all.
OutputProfile.EntitlementEnforced is false: every shipped tier is selectable by
any build, and HasProOutput — the one property the tier setter, the dropdown's
strikethrough and the locked-item style all read — answers yes regardless of
ownership. static readonly rather than const, so the consumed `||` does not fold
into unreachable operand code (same reason as DevBuild.IsDevelopment).
The licence indicator row is suppressed while the switch is off: it exists to
explain what the boundary costs, and claiming "Steam ID Limit: 60fps" to an
unowned build would be a false statement. Docs corrected in place — the enforced
rule is unchanged, only its state is recorded.
Tests: one integration case covers both switch states (unowned build reaches
1080p60 with the switch off, 1080p30 with it on), so flipping at launch leaves no
red test behind. The two suites that anchor on the pinned licence row early-return
while it is absent; EntitlementTests covers that state meanwhile.
667 pass, build 0 warnings.
2026-11-12 07:50:59 -08:00
..
2026-11-05 09:57:07 -08:00
2026-11-12 07:50:59 -08:00
2026-11-01 14:13:57 -08:00
2026-09-26 14:44:57 -07:00
2026-11-05 09:57:07 -08:00
2026-09-26 14:44:57 -07:00
2026-09-24 08:27:00 -07:00
2026-09-26 12:08:27 -07:00
2026-11-02 10:47:48 -08:00
2026-10-30 14:42:40 -07:00
2026-11-02 11:06:43 -08:00
2026-11-01 07:01:50 -08:00
2026-11-12 07:50:59 -08:00
2026-11-01 13:48:28 -08:00
2026-10-30 13:18:23 -07:00
2026-10-09 13:27:53 -07:00
2026-11-06 12:30:48 -08:00
2026-10-09 13:27:53 -07:00
2026-09-14 12:30:44 -07:00
2026-11-06 12:21:24 -08:00
2026-10-10 07:08:01 -07:00
2026-08-23 13:33:33 -07:00
2026-08-31 19:32:41 -07:00
2026-11-05 15:38:32 -08:00
2026-11-01 13:32:23 -08:00
2026-11-01 13:17:40 -08:00
2026-10-21 23:09:11 -07:00
2026-10-28 13:09:15 -07:00
2026-10-09 13:22:52 -07:00
2026-11-01 09:16:27 -08:00
2026-10-27 09:25:49 -07:00
2026-10-04 15:05:28 -07:00
2026-11-06 12:56:05 -08:00
2026-09-05 14:31:03 -07:00
2026-10-30 07:53:37 -07:00
2026-10-09 22:15:59 -07:00
2026-11-02 11:10:21 -08:00
2026-11-05 14:53:06 -08:00
2026-08-24 09:08:03 -07:00
2026-11-05 08:39:46 -08:00
2026-09-04 11:01:51 -07:00
2026-11-05 08:20:33 -08:00
2026-11-05 08:05:18 -08:00
2026-11-05 09:57:07 -08:00
2026-11-10 12:41:39 -08:00
2026-11-10 11:59:02 -08:00
2026-11-10 12:25:19 -08:00
2026-10-16 18:23:20 -07:00
2026-10-30 08:29:28 -07:00
2026-10-10 11:52:17 -07:00
2026-10-30 09:18:50 -07:00
2026-11-10 11:55:42 -08:00
2026-11-05 09:38:18 -08:00
2026-11-05 17:14:40 -08:00
2026-11-11 09:52:27 -08:00
2026-11-12 07:50:59 -08:00
2026-11-10 12:25:19 -08:00
2026-08-31 19:45:48 -07:00
2026-09-28 11:53:52 -07:00
2026-10-05 11:10:22 -07:00
2026-11-05 09:57:07 -08:00
2026-11-05 12:09:38 -08:00
2026-10-30 12:32:07 -07:00
2026-10-30 13:46:05 -07:00
2026-10-30 08:30:33 -07:00
2026-11-02 11:20:54 -08:00
2026-08-26 06:48:14 -07:00
2026-08-26 06:48:14 -07:00
2026-11-05 14:56:20 -08:00
2026-09-28 11:53:52 -07:00
2026-11-05 09:38:18 -08:00
2026-11-01 13:08:03 -08:00
2026-11-10 18:09:16 -08:00
2026-11-04 14:22:32 -08:00
2026-11-10 17:59:28 -08:00
2026-11-02 18:17:18 -08:00
2026-10-30 13:18:23 -07:00
2026-09-15 19:25:39 -07:00
2026-11-05 10:40:25 -08:00
2026-11-05 09:15:30 -08:00
2026-11-05 09:38:18 -08:00
2026-11-05 07:54:06 -08:00
2026-11-05 08:15:32 -08:00
2026-11-05 08:15:32 -08:00
2026-11-05 09:57:07 -08:00
2026-10-30 14:01:29 -07:00
2026-11-02 11:34:48 -08:00
2026-10-30 13:32:24 -07:00
2026-08-23 12:25:04 -07:00
2026-11-02 11:24:50 -08:00
2026-11-04 11:19:40 -08:00
2026-10-30 09:30:56 -07:00
2026-11-04 12:14:46 -08:00
2026-11-02 11:38:17 -08:00
2026-11-01 07:46:10 -08:00
2026-10-27 10:20:53 -07:00
2026-10-09 13:32:38 -07:00
2026-11-02 11:18:10 -08:00
2026-11-01 16:26:20 -08:00
2026-09-27 08:55:55 -07:00
2026-09-27 15:37:46 -07:00
2026-09-27 15:37:46 -07:00
2026-11-01 09:55:04 -08:00
2026-09-18 10:20:25 -07:00
2026-11-10 12:54:54 -08:00
2026-09-14 16:14:00 -07:00
2026-11-10 11:51:21 -08:00
2026-08-23 13:33:33 -07:00
2026-11-04 10:52:35 -08:00
2026-08-31 17:53:34 -07:00
Scene strip now renders in canonical F-key order regardless of persisted SortOrder. The strip loads Scenes ORDER BY SortOrder while each tab's F-key label is name-derived, so a session that persisted Chat before BRB (found on the creator's DB: SortOrder 2/3) showed tabs 'Chat F4' then 'BRB F3'. MainViewModel.LoadLayout now calls the new ReorderScenesToCanonical() - the five canonical scenes reorder to Starting, Live, BRB, Chat, Ending (F1-F5, stable among renamed non-canonical scenes), and the next auto-save re-stamps SortOrder so the heal persists. One integration test (SceneOrderTests) seeds the swapped-order DB and asserts loaded order, F1-F5 labels, and that a save persists the corrected ordering. 423 pass, 0 build warnings. (Unit: scene order)
2026-10-10 12:09:07 -07:00
2026-11-06 12:21:24 -08:00
2026-10-30 14:54:05 -07:00
2026-10-30 14:50:20 -07:00
2026-10-30 15:05:33 -07:00
2026-10-30 14:36:56 -07:00
2026-10-30 15:19:28 -07:00
2026-11-02 11:14:15 -08:00
2026-10-30 14:36:13 -07:00
2026-10-30 15:24:14 -07:00
2026-11-02 11:28:11 -08:00
2026-10-30 14:35:42 -07:00
2026-09-14 18:40:20 -07:00
2026-08-13 08:57:56 -07:00
2026-11-01 16:12:38 -08:00
2026-11-05 15:38:32 -08:00
2026-10-30 11:17:11 -07:00
2026-09-01 22:25:20 -07:00
2026-10-30 09:06:53 -07:00
2026-08-13 11:04:32 -07:00
2026-08-19 11:51:32 -07:00
2026-10-30 10:02:06 -07:00
2026-08-13 09:29:58 -07:00
2026-09-28 11:53:52 -07:00
2026-10-28 13:09:15 -07:00
2026-11-04 17:05:06 -08:00
2026-11-09 13:05:44 -08:00
2026-11-09 13:05:44 -08:00
2026-10-30 12:33:40 -07:00
2026-11-11 10:19:20 -08:00
2026-11-01 07:01:50 -08:00
2026-08-16 17:48:37 -07:00
2026-11-05 12:09:38 -08:00
2026-10-30 13:16:19 -07:00
2026-11-04 10:11:39 -08:00
2026-11-04 17:17:57 -08:00
2026-11-04 15:01:47 -08:00
2026-11-04 15:01:47 -08:00
2026-11-04 15:01:47 -08:00
2026-10-30 10:29:22 -07:00
2026-11-11 10:06:54 -08:00
2026-08-06 09:38:35 -07:00
2026-11-02 11:43:57 -08:00
2026-10-27 08:39:49 -07:00
2026-10-27 09:12:37 -07:00
2026-11-01 13:48:28 -08:00
2026-10-04 09:24:12 -07:00
2026-10-30 13:22:13 -07:00
2026-11-02 11:31:49 -08:00
2026-10-21 19:23:29 -07:00
2026-10-21 08:58:24 -07:00
2026-10-09 10:31:11 -07:00
2026-09-17 09:16:56 -07:00
2026-09-01 22:25:20 -07:00
Screen backdrop (schema v5/v6) + five-scene catalog + webcam polish: live desktop/game capture as a permanent non-deletable bottom layer (Source.IsBackdrop), auto full-screen game detection (Win32FullScreenDetector) else primary display, GraphicsCapturePicker re-designation, refcounted shared ScreenCaptureManager, Live-only backdrop by policy (HasBackdrop + v5-v6 backfill + EnforceBackdropPolicy, checkbox gone), SceneCatalog (Starting/Live/BRB/Chat/Ending) with + button re-adding missing scenes, webcam mid-session transparent-container fix (GetPreviewBitmap propagation), Chat half-screen-area cap, 'Add Webcam' always opens the picker (SwapWebcamIdentityAsync, no silent resurrect), WindowsRuntimeMarshal frame-read + 5s-throttled errors, docs updated, tests (65 passing)
2026-08-07 14:15:50 -07:00
2026-09-17 08:56:04 -07:00
2026-09-14 16:14:00 -07:00
2026-09-22 07:00:47 -07:00
2026-10-04 15:28:05 -07:00
2026-10-27 09:12:59 -07:00
2026-10-30 14:42:40 -07:00
2026-10-04 15:27:01 -07:00
2026-11-05 16:41:09 -08:00
2026-09-23 16:45:56 -07:00
2026-11-05 09:42:36 -08:00
2026-10-28 13:09:15 -07:00
2026-11-01 08:51:28 -08:00
2026-10-08 08:26:29 -07:00