Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
251 commits
Select commit Hold shift + click to select a range
0acfa7d
docs: clarify database pool limits and rollout headroom
Producdevity Nov 9, 2026
f820a7d
Merge pull request #518 from Producdevity/fix/production-prisma-pool
Producdevity Nov 9, 2026
064d066
fix: exclude local agent artifacts from checks
Producdevity Nov 9, 2026
65ad30a
fix: ignore nested agent folders across checks
Producdevity Nov 9, 2026
da5e5cf
Merge pull request #520 from Producdevity/fix/local-agent-check-exclu…
Producdevity Nov 9, 2026
cb9d957
feat: add emulator icons and Switch 2 platform mappings
Producdevity Nov 12, 2026
1daa05f
feat: copy and edit emulator custom field configurations
Producdevity Nov 12, 2026
eade6f4
feat: edit complete custom field setups through JSON
Producdevity Nov 12, 2026
014d24f
fix: handle JSON configuration review edge cases
Producdevity Nov 12, 2026
05b183a
fix: preserve report units and normalize stored defaults
Producdevity Nov 12, 2026
4644c5d
docs: separate lasting guides from PR review evidence
Producdevity Nov 13, 2026
9a142f5
chore: standardize emulator artwork on WebP
Producdevity Nov 13, 2026
30c4cdb
docs: clarify custom field ordering precedence
Producdevity Nov 13, 2026
72265f6
test: resolve emulator assets relative to the spec
Producdevity Nov 13, 2026
c7dceb9
test: locate the documented example from its module
Producdevity Nov 13, 2026
3abd88d
test: accept both Markdown line ending conventions
Producdevity Nov 13, 2026
642c2d3
test: read the guide with the existing Markdown parser
Producdevity Nov 13, 2026
80a5398
Merge pull request #523 from Producdevity/feat/emulators-maintenance
Producdevity Nov 13, 2026
d44f65b
Merge pull request #524 from Producdevity/feat/emulator-custom-field-…
Producdevity Nov 13, 2026
7bfb053
fix: restore lazy loading for game cards
Producdevity Nov 13, 2026
951f0d3
fix: preserve manual image URL drafts
Producdevity Nov 13, 2026
80c1aa4
fix: request raster placeholder images
Producdevity Nov 13, 2026
4dd2bd6
fix: reset performance replacement sessions
Producdevity Nov 13, 2026
0fa75e2
fix: preserve async filter analytics labels
Producdevity Nov 13, 2026
1034463
test: cover external game card image loading
Producdevity Nov 13, 2026
7e8fa42
fix: normalize empty image URL drafts
Producdevity Nov 13, 2026
b9a4cc4
test: cover performance replacement error recovery
Producdevity Nov 13, 2026
d853491
test: wait for home controls before keyboard navigation
Producdevity Nov 13, 2026
3f5eb5f
fix: separate desktop filter collapse from mobile scroll lock
Producdevity Nov 13, 2026
599a4a8
test: verify unselected hardware labels are excluded
Producdevity Nov 13, 2026
c43ddb2
Merge pull request #526 from Producdevity/fix/game-card-lazy-loading
Producdevity Nov 13, 2026
8b69506
fix: synchronize games search with URL navigation
Producdevity Nov 13, 2026
700085f
docs: correct the default Steam batch response example
Producdevity Nov 13, 2026
e94f175
refactor: guard trust administration with the shared procedure
Producdevity Nov 13, 2026
93752ce
refactor: remove unused internal permission procedures
Producdevity Nov 13, 2026
830d200
fix: restrict emulator administration to authorized users
Producdevity Nov 13, 2026
bbc5de4
Merge pull request #529 from Producdevity/fix/performance-replacement…
Producdevity Nov 13, 2026
8d7536b
refactor: centralize pending game edit authorization
Producdevity Nov 13, 2026
f873e79
refactor: share committed report vote effects
Producdevity Nov 13, 2026
fe9aca9
fix: expose preferred hardware settings beside filters
Producdevity Nov 13, 2026
9b0fbe6
refactor: use paged hardware selectors for preferences
Producdevity Nov 13, 2026
c5eaddc
refactor: remove unused web device preference endpoints
Producdevity Nov 13, 2026
17ad104
test: exercise report custom fields in the browser
Producdevity Nov 13, 2026
5dc52df
fix: show game submission navigation on mobile
Producdevity Nov 13, 2026
e08de74
fix: preserve focus when updating report filters
Producdevity Nov 13, 2026
0fbf5eb
test: wait for report data before collapsing filters
Producdevity Nov 13, 2026
473d0c7
feat: link missing PC hardware to GitHub requests
Producdevity Nov 13, 2026
c5232bf
fix: require explicit consent before analytics tracking
Producdevity Nov 13, 2026
fa04fe3
fix: accept custom graphics driver names in reports
Producdevity Nov 13, 2026
46dbf2c
fix: preserve custom field template attributes and categories
Producdevity Nov 13, 2026
b26824c
Merge pull request #531 from Producdevity/test/home-keyboard-readiness
Producdevity Nov 13, 2026
514c3c6
fix: reconcile pending searches with current navigation
Producdevity Nov 13, 2026
f703f92
Merge pull request #530 from Producdevity/fix/filter-analytics-labels
Producdevity Nov 13, 2026
9bf5e7c
fix: include negative scores in trust dashboard totals
Producdevity Nov 13, 2026
1129e29
feat: show private compatibility report history
Producdevity Nov 13, 2026
98de8e1
Merge pull request #534 from Producdevity/fix/steam-batch-api-example
Producdevity Nov 13, 2026
8de17fa
Merge pull request #536 from Producdevity/fix/filter-navigation-focus
Producdevity Nov 13, 2026
7cfeaab
Merge remote-tracking branch 'origin/staging' into fix/image-url-drafts
Producdevity Nov 13, 2026
366e649
Merge remote-tracking branch 'origin/staging' into fix/raster-placeho…
Producdevity Nov 13, 2026
aa0b819
Merge pull request #532 from Producdevity/fix/desktop-filter-scroll
Producdevity Nov 13, 2026
ddca68c
Merge pull request #537 from Producdevity/refactor/remove-unused-proc…
Producdevity Nov 13, 2026
9779298
fix: preserve admin emulator search and statistics access
Producdevity Nov 13, 2026
fd68375
fix: preserve search drafts when normalized URLs return
Producdevity Nov 13, 2026
27b7beb
Merge pull request #535 from Producdevity/refactor/trust-admin-proced…
Producdevity Nov 13, 2026
42e6149
Merge pull request #539 from Producdevity/refactor/game-edit-policy
Producdevity Nov 13, 2026
e3fd8e4
Merge pull request #541 from Producdevity/fix/preferred-hardware-disc…
Producdevity Nov 13, 2026
1461fe9
Merge pull request #543 from Producdevity/refactor/remove-unused-web-…
Producdevity Nov 13, 2026
a115b8c
fix: isolate committed vote effects and route PC notifications
Producdevity Nov 13, 2026
eef7730
refactor: move user workflows into their feature module
Producdevity Nov 13, 2026
1dcff9f
Merge pull request #527 from Producdevity/fix/image-url-drafts
Producdevity Nov 13, 2026
902a818
Merge pull request #528 from Producdevity/fix/raster-placeholder-images
Producdevity Nov 13, 2026
563c7f7
Merge pull request #545 from Producdevity/fix/mobile-game-submission-…
Producdevity Nov 13, 2026
cbd54a2
fix: reconcile preference saves by submission identity
Producdevity Nov 13, 2026
553fdc6
test: decode serialized report input before validation
Producdevity Nov 13, 2026
03bac26
Merge pull request #533 from Producdevity/fix/navbar-game-search
Producdevity Nov 13, 2026
7928444
Merge pull request #538 from Producdevity/fix/emulator-admin-permissions
Producdevity Nov 13, 2026
c55dbcb
Merge pull request #540 from Producdevity/refactor/report-vote-side-e…
Producdevity Nov 13, 2026
b9c9195
Merge pull request #547 from Producdevity/fix/explicit-cookie-consent
Producdevity Nov 13, 2026
bff6f4c
fix: ignore outdated autocomplete responses
Producdevity Nov 13, 2026
e9b22fc
fix: reconcile trust with report approval status
Producdevity Nov 13, 2026
3c4ac45
fix: retain hardware request links with blank configuration
Producdevity Nov 13, 2026
a56f220
fix: refresh driver choices and connect form validation
Producdevity Nov 13, 2026
750b0d2
fix: preserve voting privacy in extracted user workflows
Producdevity Nov 13, 2026
faf9666
Merge pull request #544 from Producdevity/test/listing-form-browser-v…
Producdevity Nov 13, 2026
377bd4f
fix: keep custom driver entry available after searching
Producdevity Nov 13, 2026
5e34f0e
Merge pull request #542 from Producdevity/refactor/async-hardware-pre…
Producdevity Nov 13, 2026
51dbdb0
feat: filter and manage saved compatibility reports
Producdevity Nov 13, 2026
58bd190
Merge pull request #546 from Producdevity/feat/hardware-request-links
Producdevity Nov 13, 2026
d060ee9
Merge pull request #549 from Producdevity/refactor/user-router-services
Producdevity Nov 13, 2026
a30e236
fix: preserve moderation edge cases and transaction boundaries
Producdevity Nov 13, 2026
5084054
fix: announce required driver fields in both entry modes
Producdevity Nov 13, 2026
f699c58
fix: report trust reconciliation actions and level direction
Producdevity Nov 13, 2026
ddb0373
Merge pull request #548 from Producdevity/fix/custom-driver-entry
Producdevity Nov 13, 2026
026ff69
refactor: resolve and enforce React Compiler diagnostics
Producdevity Nov 13, 2026
dd7f078
fix: retain valid bookmark filters during edits
Producdevity Nov 13, 2026
9a7534e
fix: isolate query caches between auth sessions
Producdevity Nov 13, 2026
6752a9a
fix: guard bookmark actions and recover valid pages
Producdevity Nov 13, 2026
9caf875
Merge pull request #553 from Producdevity/fix/session-query-cache
Producdevity Nov 13, 2026
7186845
fix: preserve form sessions and async UI state
Producdevity Nov 13, 2026
611cfcb
fix: keep unavailable bookmark actions discoverable
Producdevity Nov 13, 2026
bb65c7c
fix: distinguish background preference writes and stale images
Producdevity Nov 13, 2026
b564cbb
fix: publish trust analytics after owning transactions commit
Producdevity Nov 13, 2026
63e3480
Merge pull request #551 from Producdevity/feat/bookmark-filtering
Producdevity Nov 13, 2026
308cb98
fix: retain pending admin saves and recover failed consent
Producdevity Nov 13, 2026
eb13fe6
merge: sync staging bookmark and session fixes
Producdevity Nov 13, 2026
7193bd1
fix: serialize moderation decisions and attribute note edits
Producdevity Nov 13, 2026
8c54e64
fix: preserve input while the initial session loads
Producdevity Nov 13, 2026
c2e3df0
fix: discard pending searches for external selections
Producdevity Nov 13, 2026
83e07ff
fix: serialize active-ban checks and preserve approval times
Producdevity Nov 13, 2026
69f8768
merge: integrate profile navigation and report history
Producdevity Nov 13, 2026
88789f2
fix: retain rendered data during initial session refresh
Producdevity Nov 13, 2026
fc2b642
merge: preserve reviewed template form lifecycle
Producdevity Nov 13, 2026
13f6bcb
merge: retain reviewed transaction conflict handling
Producdevity Nov 13, 2026
ab578b5
fix: align Eden resolution scales with upstream config
Producdevity Nov 13, 2026
6ee257d
fix: discard unknown-session data before binding auth
Producdevity Nov 13, 2026
24b2738
test: verify template attributes through the authenticated API
Producdevity Nov 13, 2026
71b1318
fix: distinguish received votes from voting activity
Producdevity Nov 13, 2026
a7dc5d0
test: target active page content in browser checks
Producdevity Nov 13, 2026
671ba00
fix: preserve plain text at storage and search boundaries
Producdevity Nov 13, 2026
5dc903e
merge: integrate session initialization fix
Producdevity Nov 13, 2026
62ef536
refactor: isolate transactional game moderation workflows
Producdevity Nov 13, 2026
713501e
fix: derive dashboard refresh state from its request
Producdevity Nov 13, 2026
cd24248
fix: preserve numeric Eden resolution enum inputs
Producdevity Nov 13, 2026
6db0988
merge: include final game moderation review fixes
Producdevity Nov 13, 2026
dd3c19b
Merge pull request #554 from Producdevity/fix/session-initialization
Producdevity Nov 13, 2026
234687d
fix: validate catalog pagination before database queries
Producdevity Nov 13, 2026
d868103
fix: wait for auth readiness before accepting report input
Producdevity Nov 13, 2026
7df1980
Merge pull request #555 from Producdevity/fix/eden-resolution-scales
Producdevity Nov 13, 2026
c0d746f
refactor: rely on validated catalog pagination
Producdevity Nov 13, 2026
5e9def7
Merge commit 'd8681033335cfb4ae44ccb31f7ce15489c472445' into fix/plai…
Producdevity Nov 13, 2026
6a21b75
Merge commit 'd8681033335cfb4ae44ccb31f7ce15489c472445' into fix/cata…
Producdevity Nov 13, 2026
1904bdc
feat: reuse last submitted emulator settings
Producdevity Nov 13, 2026
f217f8b
Merge branch 'staging' into fix/profile-vote-counts
Producdevity Nov 13, 2026
abf8193
Merge branch 'refactor/react-compiler-warnings' into fix/profile-vote…
Producdevity Nov 13, 2026
08ec43a
merge: include shared auth readiness fixes
Producdevity Nov 13, 2026
a692d33
merge: sync current staging maintenance fixes
Producdevity Nov 13, 2026
5936d28
Merge commit 'd8681033335cfb4ae44ccb31f7ce15489c472445' into feat/rep…
Producdevity Nov 13, 2026
86fdad9
Merge commit '7df19809607034fe33c047f5e154d0d91278c5ee' into feat/rep…
Producdevity Nov 13, 2026
5972248
Merge commit 'd8681033335cfb4ae44ccb31f7ce15489c472445' into fix/dash…
Producdevity Nov 13, 2026
3d5e083
Merge commit '7df19809607034fe33c047f5e154d0d91278c5ee' into fix/dash…
Producdevity Nov 13, 2026
b7cdd0f
Merge commit 'd8681033335cfb4ae44ccb31f7ce15489c472445' into feat/las…
Producdevity Nov 13, 2026
fc7d3b1
refactor: align template errors with the nonnullable API contract
Producdevity Nov 13, 2026
55bb1ca
Merge commit '7df19809607034fe33c047f5e154d0d91278c5ee' into feat/las…
Producdevity Nov 13, 2026
abf76f7
Merge pull request #552 from Producdevity/refactor/react-compiler-war…
Producdevity Nov 13, 2026
58953ee
Merge commit 'abf76f7acfced4a155b8b4ff7384920b7d444d6e' into feat/rep…
Producdevity Nov 13, 2026
fb0fa02
Merge commit 'abf76f7acfced4a155b8b4ff7384920b7d444d6e' into fix/dash…
Producdevity Nov 13, 2026
4b1e463
Merge commit 'abf76f7acfced4a155b8b4ff7384920b7d444d6e' into fix/cata…
Producdevity Nov 13, 2026
a1905b2
Merge commit 'abf76f7acfced4a155b8b4ff7384920b7d444d6e' into feat/las…
Producdevity Nov 13, 2026
da340f2
merge: sync reviewed auth and staging dependencies
Producdevity Nov 13, 2026
c69cf98
Merge branch 'staging' into fix/profile-vote-counts
Producdevity Nov 13, 2026
29ff31c
merge: sync actual staging ancestry
Producdevity Nov 13, 2026
367420c
Merge commit 'abf76f7acfced4a155b8b4ff7384920b7d444d6e' into fix/mobi…
Producdevity Nov 13, 2026
1dd35bf
fix: normalize report page numbers from URLs
Producdevity Nov 13, 2026
ec3c337
fix: reject unsafe catalog page and offset numbers
Producdevity Nov 13, 2026
e307486
fix: align mobile report vote completion effects
Producdevity Nov 13, 2026
411d8b7
fix: preserve report history navigation and validate offsets
Producdevity Nov 13, 2026
eb2c087
Merge pull request #550 from Producdevity/fix/report-status-trust
Producdevity Nov 13, 2026
ec00fb9
fix: validate calculated catalog pagination offsets
Producdevity Nov 13, 2026
eeb7075
merge: sync approved staging moderation changes
Producdevity Nov 13, 2026
3654c3d
merge: sync staging trust fixes
Producdevity Nov 13, 2026
9ad16f2
merge: sync staging trust fixes
Producdevity Nov 13, 2026
0cb9722
Merge commit 'eb2c087f6051e060e37cab42553b89ad608ef862' into feat/las…
Producdevity Nov 13, 2026
cd44b5d
Merge commit 'eb2c087f6051e060e37cab42553b89ad608ef862' into fix/mobi…
Producdevity Nov 13, 2026
38b0efc
Merge pull request #557 from Producdevity/fix/profile-vote-counts
Producdevity Nov 13, 2026
171dd7d
Merge pull request #560 from Producdevity/fix/dashboard-refresh-state
Producdevity Nov 13, 2026
7936a5d
Merge pull request #559 from Producdevity/feat/report-submission-history
Producdevity Nov 13, 2026
3ac3d1b
fix: normalize unsafe game catalog URL pages
Producdevity Nov 13, 2026
046b286
refactor: enforce validation at API boundaries
Producdevity Nov 13, 2026
b9c5b35
fix: handle template defaults and duplication edge cases
Producdevity Nov 13, 2026
a9b24a0
Merge pull request #562 from Producdevity/feat/last-used-emulator-set…
Producdevity Nov 13, 2026
2678348
Merge reviewed staging changes for production
Producdevity Nov 13, 2026
df4c8d3
Merge saved emulator settings into production candidate
Producdevity Nov 13, 2026
4324aad
fix: preserve UI state during async and keyboard workflows
Producdevity Nov 13, 2026
ccd1044
Merge pull request #563 from Producdevity/fix/mobile-report-vote-effects
Producdevity Nov 13, 2026
46984d8
fix: reconcile range defaults when template bounds change
Producdevity Nov 13, 2026
ba6c90a
test: let pagination clicks handle target replacement
Producdevity Nov 13, 2026
0425feb
Merge pull request #556 from Producdevity/fix/plain-text-preservation
Producdevity Nov 13, 2026
68d2170
fix: make range defaults directly editable in template forms
Producdevity Nov 13, 2026
22a36a9
Merge staged validation and text preservation fixes
Producdevity Nov 13, 2026
5ef22c0
merge: integrate staging plain-text preservation
Producdevity Nov 13, 2026
e52a60d
fix: scope badge assignment drafts and paginate available badges
Producdevity Nov 13, 2026
71a8e63
fix: discard stale options before debounced lookups
Producdevity Nov 13, 2026
24f6169
fix: recover failed badge queries without discarding drafts
Producdevity Nov 13, 2026
a01a091
Merge pull request #558 from Producdevity/fix/catalog-pagination-vali…
Producdevity Nov 13, 2026
4cebcbf
refactor: remove redundant validation helpers
Producdevity Nov 13, 2026
2ce39cc
Merge current staging for validation cleanup
Producdevity Nov 13, 2026
4c74aaf
Merge commit 'a01a0910' into fix/badge-assignment-session
Producdevity Nov 13, 2026
fa1ba1a
merge: sync current staging browser fixes
Producdevity Nov 13, 2026
a154295
Merge pull request #564 from Producdevity/fix/ui-state-review-followups
Producdevity Nov 13, 2026
7d3f872
fix: preserve badge navigation and recipient feedback
Producdevity Nov 13, 2026
8b073f0
fix: validate mobile pagination and preset integer inputs
Producdevity Nov 13, 2026
58f4625
fix: enforce integers across mobile pagination boundaries
Producdevity Nov 13, 2026
54a3eef
fix: validate mobile developer verification pagination
Producdevity Nov 13, 2026
f35e62b
fix: render assigned badge colors from the theme palette
Producdevity Nov 13, 2026
f79510e
Merge pull request #566 from Producdevity/refactor/validation-boundaries
Producdevity Nov 13, 2026
511e353
Merge pull request #565 from Producdevity/fix/badge-assignment-session
Producdevity Nov 13, 2026
cad83b1
Merge commit '511e353d' into fix/badge-palette-colors
Producdevity Nov 13, 2026
426762b
Merge pull request #561 from Producdevity/fix/custom-field-template-a…
Producdevity Nov 13, 2026
b4ba017
refactor: share safe pagination offset refinement
Producdevity Nov 13, 2026
d7e0e7b
chore: preserve unchanged generated API reference
Producdevity Nov 13, 2026
07c3508
Merge validated staging fixes into production candidate
Producdevity Nov 13, 2026
505ae83
Merge custom field template validation into production candidate
Producdevity Nov 13, 2026
5bfe4fa
fix: preserve bans whose issuing moderator was deleted
Producdevity Nov 13, 2026
b38e85d
Merge pull request #568 from Producdevity/fix/badge-palette-colors
Producdevity Nov 13, 2026
f55272e
Merge badge palette fix into production candidate
Producdevity Nov 13, 2026
193e105
fix: validate persisted report integer inputs
Producdevity Nov 13, 2026
7441d3b
fix: wait for the current user before linking game submissions
Producdevity Nov 13, 2026
3b1bae8
Merge pull request #567 from Producdevity/fix/mobile-numeric-validation
Producdevity Nov 13, 2026
8f1730f
Merge staging into fix/report-integer-inputs
Producdevity Nov 13, 2026
82daa42
Merge mobile numeric validation into production candidate
Producdevity Nov 13, 2026
106348b
refactor: keep PC memory bounds inclusive in generated docs
Producdevity Nov 13, 2026
b28dc7a
fix: validate persisted integer boundaries
Producdevity Nov 13, 2026
601539c
Merge pull request #569 from Producdevity/fix/game-submission-role-re…
Producdevity Nov 13, 2026
2486205
test: verify both inclusive PC memory bounds
Producdevity Nov 13, 2026
c3381cf
Merge game submission readiness into production candidate
Producdevity Nov 13, 2026
14f1d48
test: assert the generated optional schema exactly
Producdevity Nov 13, 2026
50c81f7
Merge pull request #570 from Producdevity/fix/report-integer-inputs
Producdevity Nov 13, 2026
ba6ab21
Merge persisted report integer validation into production candidate
Producdevity Nov 13, 2026
18db611
Merge pull request #571 from Producdevity/fix/stored-integer-boundaries
Producdevity Nov 13, 2026
fe962b6
test: wait for report rows before reading table data
Producdevity Nov 13, 2026
3dbb908
Merge shared integer boundaries into production candidate
Producdevity Nov 13, 2026
1e52be7
Merge pull request #572 from Producdevity/fix/report-table-data-readi…
Producdevity Nov 13, 2026
7ebf6b6
test: assert the main navigation keyboard order
Producdevity Nov 13, 2026
d7b2094
Merge report table readiness verification into production candidate
Producdevity Nov 13, 2026
8771a8e
fix: validate remaining pagination inputs before database access
Producdevity Nov 13, 2026
19af55e
fix: validate effective risk-only report pagination
Producdevity Nov 13, 2026
82228bb
fix: retain usable focus when async filter results change
Producdevity Nov 13, 2026
1708c80
Merge pull request #574 from Producdevity/fix/navigation-keyboard-test
Producdevity Nov 13, 2026
7b86818
Merge commit '19af55eb9d4a44713df2702d6246701029cd3202' into fix/rele…
Producdevity Nov 13, 2026
5aae0a7
test: strengthen async filter review assertions
Producdevity Nov 13, 2026
e03394e
Merge commit '1708c8001ced48ad5c8b73806164a5fdb266cfeb' into fix/pagi…
Producdevity Nov 13, 2026
2e5223c
Merge commit '5aae0a7a7908e4d62f5580eac5cf4d9d91affba7' into fix/pagi…
Producdevity Nov 13, 2026
508a4e1
Merge commit '2e5223c8d9721fe68b909e94482fc186d204510e' into fix/rele…
Producdevity Nov 13, 2026
a2407cb
fix: preserve custom field ordering and stored configuration errors
Producdevity Nov 13, 2026
2697063
fix: retain bookmark and profile browsing state
Producdevity Nov 13, 2026
41329c6
fix: align report decision effects and notification links
Producdevity Nov 13, 2026
4d7af0b
fix: bound TGDB duplicate lookup batches
Producdevity Nov 13, 2026
9c92ca7
refactor: centralize committed moderation trust effects
Producdevity Nov 13, 2026
03beaa7
fix: name form controls and preserve preference feedback
Producdevity Nov 13, 2026
ac3444a
Merge pull request #576 from Producdevity/fix/async-filter-focus
Producdevity Nov 13, 2026
7d07607
Merge pull request #573 from Producdevity/fix/pagination-input-contracts
Producdevity Nov 13, 2026
1860bf8
fix: synchronize emulator and device catalog fixtures
Producdevity Nov 13, 2026
bccf554
fix: encode notification content at email HTML sinks
Producdevity Nov 13, 2026
ad7ed77
docs: clarify legacy text formatter guarantees
Producdevity Nov 13, 2026
b7d8235
fix: address profile and bookmark review findings
Producdevity Nov 13, 2026
64bf0b9
Merge verified pagination and filter fixes into production candidate
Producdevity Nov 13, 2026
f0e4b0a
fix: normalize catalog brands and complete verified chip metadata
Producdevity Nov 13, 2026
d4d9ee6
Merge reviewed configuration and profile corrections into production …
Producdevity Nov 13, 2026
683db78
Merge notification HTML encoding into production candidate
Producdevity Nov 13, 2026
0450fc8
Merge verified catalog fixtures into production candidate
Producdevity Nov 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Fixes # (issue)

- [ ] My code follows the [style guidelines](https://github.com/Producdevity/EmuReady/blob/master/CONTRIBUTING.md#code-style) of this project
- [ ] I have performed a self-review of my code
- [ ] I have made corresponding changes to the documentation
- [ ] I have updated relevant documentation, or no documentation update is needed
- [ ] I have checked that all checks (lint, typecheck, test) pass

## Notes for reviewers
Expand Down
11 changes: 9 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ Do not report security issues in public GitHub issues. Contact a maintainer priv

Prerequisites:

- Node.js `v22.17.0`, matching [.nvmrc](.nvmrc)
- pnpm through Corepack; this repo uses `pnpm@11.1.0`
- Node.js matching [.nvmrc](.nvmrc)
- pnpm through Corepack, using the `packageManager` version in [package.json](package.json)
- PostgreSQL
- Clerk credentials for authenticated flows

Expand Down Expand Up @@ -100,6 +100,13 @@ pnpm test:e2e:ci

Playwright reads `.env.test.local` and `.env.test`. See [docs/E2E_TESTING_SETUP.md](docs/E2E_TESTING_SETUP.md).

## Documentation

- Extend an existing topic before adding a guide. New guides should serve a lasting reader task and be linked from the [documentation index](docs/README.md).
- Keep test results, rollout status, issue audits and review-only screenshots in the pull request. Attach review images to GitHub instead of committing them as documentation assets.
- Link to schemas and configuration files for exact contracts and tool versions. Validate documented configuration examples against their schemas.
- Update affected guidance in the same PR as behavior changes. Remove obsolete or duplicated material; a code change does not automatically require a new documentation file.

## Pull Requests

- Base the branch on the branch the PR targets. Use `master` unless the issue or release flow says to target `staging`.
Expand Down
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@
<a href="https://github.com/Producdevity/emuready/actions">
<img src="https://img.shields.io/github/actions/workflow/status/Producdevity/emuready/ci.yml?style=flat-square&logo=github&label=CI/CD" alt="CI/CD Status">
</a>
<a href="https://vercel.com">
<img src="https://img.shields.io/badge/Deployed_on-Vercel-black?style=flat-square&logo=vercel" alt="Deployed on Vercel">
</a>
<!-- Code Quality -->
<a href="https://github.com/Producdevity/emuready/blob/main/LICENSE">
<img src="https://img.shields.io/github/license/Producdevity/emuready?style=flat-square&label=License" alt="License">
Expand Down Expand Up @@ -143,6 +140,8 @@ Then open [http://localhost:3000](http://localhost:3000).
Environment setup is documented in [docs/DEVELOPMENT_SETUP.md](docs/DEVELOPMENT_SETUP.md). Docker-specific setup is documented in
[docs/DOCKER.md](docs/DOCKER.md), and the production container contract is in [docs/SELF_HOSTING.md](docs/SELF_HOSTING.md).

The [documentation index](docs/README.md) links the development, operations, integration and admin guides.

## Common Commands

```bash
Expand Down
2 changes: 1 addition & 1 deletion docs/MOBILE_API.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# EmuReady Public Integration API (mobile-compatible tRPC)

*Auto-generated on: 2026-07-06T20:07:17.160Z*
*Auto-generated on: 2026-11-13T21:18:52.607Z*

## Summary
- **Total Endpoints**: 113
Expand Down
21 changes: 21 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Documentation

## Development

- [Development setup](DEVELOPMENT_SETUP.md)
- [Docker development](DOCKER.md)
- [Authentication setup](AUTHENTICATION_SETUP.md)
- [Browser testing](E2E_TESTING_SETUP.md)
- [Error handling](ERROR_HANDLING.md)

## Operations and integrations

- [Self-hosting](SELF_HOSTING.md)
- [Container releases](container-image.md)
- [CORS configuration](CORS_CONFIGURATION.md)
- [Webhook troubleshooting](WEBHOOK_TROUBLESHOOTING.md)
- [Mobile API reference](MOBILE_API.md) — generated by `pnpm docs:generate`.

## Administration

- [Edit custom fields as JSON](admin/custom-fields.md)
48 changes: 48 additions & 0 deletions docs/admin/custom-fields.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Edit custom fields as JSON

On an emulator's custom fields page, choose **Edit JSON** to paste or edit its fields, attributes, categories and ordering. Choose **Save JSON** and confirm the emulator.

The JSON describes the complete setup. Omitted unused fields and categories are removed. Fields with existing Handheld or PC Report values cannot be removed or changed incompatibly.

## Format

```json
{
"version": 1,
"categories": [
{ "name": "Graphics", "displayOrder": 0 }
],
"fields": [
{
"name": "renderer",
"label": "Graphics API",
"type": "SELECT",
"category": "Graphics",
"options": [
{ "value": "vulkan", "label": "Vulkan" },
{ "value": "opengl", "label": "OpenGL" }
],
"defaultValue": "vulkan",
"isRequired": false,
"displayOrder": 0,
"categoryOrder": 0
}
]
}
```

- Keep the exported `id` when renaming an existing field or category. This preserves its identity and report values. New items may omit IDs; pasted items without a matching destination ID are matched by name or created.
- A field's `category` is a category name, or `null` for no group. Update field references when renaming a category. Empty categories are allowed.
- A category's `displayOrder` controls category order; uncategorized fields appear last. Within a group, fields sort by `categoryOrder`, then by field `displayOrder` to break ties.
- Use JSON booleans and numbers for Boolean and Range defaults, including `false` and `0`. A Select default must match an option's `value`.
- Range settings use `rangeMin`, `rangeMax`, `rangeUnit` and `rangeDecimals`. Text, Textarea and URL fields may use `placeholder`.

The [configuration schema](../../src/features/emulators/custom-field-config/shared/config.schemas.ts) defines accepted attributes and validation. The example above is checked against that schema by the test suite.

## Saving and conflicts

Changing populated fields' types, removing select options, changing range units or narrowing ranges is blocked. Rename or relabel items while retaining their IDs to preserve report values.

If another edit changes the setup while the editor is open, saving returns a conflict. Copy the draft, reopen the editor and reconcile it with the current configuration before saving again.

Custom-field management permission is required. Developers must also be verified for the emulator; the [access policy](../../src/features/emulators/custom-field-config/server/config.policy.ts) defines the role checks.
19 changes: 10 additions & 9 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ const featureLayerBoundaryZones = featureLayerRootNames.flatMap((featureRootName
const featureToAppRouteBoundaryZone = {
target: './src/features',
from: './src/app',
message: 'Feature modules must not import from Next.js app routes. Compose features in app routes.',
message:
'Feature modules must not import from Next.js app routes. Compose features in app routes.',
}

const featureBoundaryZones = [
Expand All @@ -103,6 +104,7 @@ const eslintConfig = [
ignores: [
'*.log',
'*.tsbuildinfo',
'**/.agents/**',
'.clerk/**',
'.husky/**',
'.idea/**',
Expand Down Expand Up @@ -142,14 +144,13 @@ const eslintConfig = [
'no-case-declarations': 'off',
'no-prototype-builtins': 'off',
'no-redeclare': 'off',
// TODO: set to error after fixing existing React Compiler rule violations.
'react-hooks/purity': 'warn',
'react-hooks/static-components': 'warn',
'react-hooks/immutability': 'warn',
'react-hooks/incompatible-library': 'warn',
'react-hooks/preserve-manual-memoization': 'warn',
'react-hooks/refs': 'warn',
'react-hooks/set-state-in-effect': 'warn',
'react-hooks/purity': 'error',
'react-hooks/static-components': 'error',
'react-hooks/immutability': 'error',
'react-hooks/incompatible-library': 'error',
'react-hooks/preserve-manual-memoization': 'error',
'react-hooks/refs': 'error',
'react-hooks/set-state-in-effect': 'error',
},
},
{
Expand Down
9 changes: 9 additions & 0 deletions next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,15 @@ function createContentSecurityPolicy(): string {
const nextConfig: NextConfig = {
output: 'standalone',

async rewrites() {
return [
{
source: '/assets/emulators/:logo.png',
destination: '/assets/emulators/:logo.webp',
},
]
},

// Keep build identity stable and protect clients from version skew while
// Coolify briefly overlaps the old and new containers during deployment.
...(nextBuildId ? { deploymentId: nextBuildId, generateBuildId: () => nextBuildId } : {}),
Expand Down
2 changes: 2 additions & 0 deletions playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ function createWebServerEnv(): { [key: string]: string } {
*/
export default defineConfig({
testDir: './tests',
testIgnore: ['**/.agents/**'],
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI when test.only is left on. */
Expand Down Expand Up @@ -74,6 +75,7 @@ export default defineConfig({
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
testIgnore: [
'**/.agents/**',
'**/auth.setup.ts',
'**/global.setup.ts',
'**/data-setup.spec.ts',
Expand Down
Loading
Loading