* replay: add dragging gesture support
* update dragging to support distance and duration; update mici script to go through settings
* refactor
* fix and add network
* add more
* interact device
* fix
* match statements
* more
* improve
* simplify script
* add keyboard test
* format
* simplify
* improve
* comment
* improve
* clarify
* clean
* simplify
* simplify
* move
* improve
* more delay
* simplify keyboard test
* simplify
* comment
* add onroad alert tests to mici
* scroll less
* test offroad alerts
* remove space
* scroll faster
* more toggle tests
* back to home
* test settings onroad
* fix pairing qr code
* add replay progress bar
* add replay progress bar
* simplify
* correct comment
* remove _
* we don't need this
* change click
* add return types
* fast typing
* use frames instead
* use frames instead
* update
* disable in CI
* +1
* fix script
* refactor how mici replay script cases are built
* refactor
* refactor: rename helper function for exploring settings in build_mici_script
* remove onroad settings check
* refactor
* simplify
* refactor: use explore_setting in more places to reduce duplication
* add type
* refactor: simplify explore_cases function by removing swipe_wait parameter
* add case to open wifi selection
* refactor: enhance run_actions to support after_each callback for interaction tests; rename explore_cases to scroll_through_cases
* add review training guide
* update comment
* comments
* comment
* fix swipe back
* scroll: use iOS-style weighted velocity averaging for fling
Weight older velocity samples more heavily on finger release to produce
more consistent fling velocities. The last touch samples before lift are
noisy (finger decelerating, rotating, jittering), so we trust the earlier
steadier samples more: 60% oldest, 35% middle, 5% newest.
Reverse-engineered from iOS UIScrollView by the Flutter team.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Update system/ui/lib/application.py
* Apply suggestions from code review
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* modeld: quiet do_chunk output during scons build
SCons default-prints Python function actions with all their args.
The do_chunk function has 1259 tinygrad source files as deps, causing
a wall of text during builds. Wrap in SAction with a short strfunction.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* split compile and chunk into separate Commands
cleaner fix: do_chunk only depends on the pkl, not tinygrad files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* actually epic
* use child
* inside label
* revert other stuff
* no reset_shimmer: bool
* try 2 char
* not worth dynamic chunking
* bring back
* rm
* no emoji support on shimmer
* pandad: filter out external panda
* fix
* internal panda
* move it even higher
* this
* should be this still
* anoter
* more
* 1 more time
* bruh
* try this out
* revert
* gotta do this after
* filter
* fix pairing qr code
* test pair device
* merge and pick from explore-more
* key
* fast click
* again
* add branch selection test
* click uninstall
* test prime states
* view regulatory
* test expand calibration desc
* override interactive timeout
* reorder
* remove todo
* update
* clarify
* test reset calibration
* update
* add calibration params test
* comments
* reorganize
* clarify
* add click through training guide
* this wasn't atomic!
* start mici
* always require internet to download installer
* this made it never use cached fetch!
* this skipped installer when it wrote it raced trying to run
* entirely remove
* clean up mici
* fix tici setup
* inline
* works
* more explicit pass texture like everything else, esp since sizes are not all same
* fix some confirmation dialog images
* fix image sizes
* do bigbutton
* fix
* static
* try this
* clean up and use it
* clean up
* simpler
* do this later
* do onboarding & reset
* do setup
* temp
* Revert "temp"
This reverts commit 22fbbf5c813b4915e784b9ee235ed3bde2229048.
* simpler again
* missing size
* fix
* Revert "fix"
This reverts commit 53c4e29e614181029dc8e9a2baea7694957dc8fb.
* nl
* Smooth
* Min lat accel range
* Make the moving average masked
* Bring back the range
* Update test
* Smooth desired signal too
* Diff
* Gaussian
* Fix fmt
* Remove newline
_shake_start defaults to None, but `None or 0.0` treated it as
time zero, so any button rendered within 0.5s of window creation
would play the shake animation.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* try this
* try this
* fix
* delay hide on wifi/internet
* 0.5
* fix flash on forgetting
* also reset
* fix
* todo
* dupl
* wifi after
* bring back cmts
* fix spotty internet check while downloading!
* cmt
* cmt
* todo
* resort
* more delay
* redundtant
* nl
* scroll over for wifi (waiting) OR internet (continue)
* fix scroll
* fix scroll
* show_event fully manages its scroll over, not some weiird delay mixed with other triggers via fake rising edge
* instant if not popping
* cmt
* better update flow
* clean up
* clean up
* cmt
* clean up
* todo
* failed scroller
* fix for setup
* show wrong url
* setup failed is red not orange
* clean up and fix all flashing in setup
* new updater zipapp
* fix deadlock from agnos.py throwing timeout errors, never hitting failed screen! + try catch the whole process for errors while starting process
* add todo
* set core affinity like setup in updater
* fix import
* rezip
The Python file downloader was making a separate HTTP Range request per
1MB chunk via URLFile.read(), causing massive latency overhead. Use a
single streaming GET request instead, matching the old C++ behavior.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* pressed state for larger sliders
* wifibutton
* fix
* clean up
* some work
* don't nee this now
* stash
* more
* new pressed bigcircle
* black
* interp
* just check position
* clean up and fix slider reset
* fix custom
* no speed
* stash
* even chatter couldn't figure this one out
* makes sense to combine together, less split mentality
* clean that up
* fix lag
* match ui.py prio to eliminate lag on wifiui show event. separately, why is this slow?
* night mode
* delay scroll over
* fix auto scrolling
* stash
* waiting looks disabled
* clean up and don't reset sliders until user goes back
* rm
* fix
* add termsheader back
* fix callbacks
* ctrl alt l
* fix text spacing
* clean up
* stash
* fix style
* i want to go back
* guard on exit
* kinda useless stuff
* Revert "kinda useless stuff"
This reverts commit a4acbac31523408f358c5f68262cb630aa13ad8e.
* Revert "guard on exit"
This reverts commit 63ccfbf64edfbe1a144a441681f5ec78d8021ff7.
* wide
* setup pressed!
* grow animation
* 10s after initial
* slow fast
* start onboarding (terms)
* rm duplicate page
* add qr code
* final grey
* fix visual lag on first start
* clean up dead code
* dont exit from cancel
* revert grey
* clean up, REVIEW ME
* Revert "clean up, REVIEW ME"
This reverts commit c66fa60947c5f922520e7cf58c630b4bbe2d0177.
* reboot slider
* kb fix
* Revert "kb fix"
This reverts commit 883039448e6c37ae1d25d4f75ada6e96b6736358.
* ./ goes to letters
* Revert "./ goes to letters"
This reverts commit 0d97442427edb1a000638863a3f2181204ddc160.
* clean up
* some more clean up
* more
* clean up
* rename block
* reset pending scroll so it can't use stale data in rare sequence
* remove unused assets
* clean up imports
* fix updater
* clean up
* fix double reboot
* demo time - reset to setup on reboot
* let manager restart
* Revert "demo time - reset to setup on reboot"
This reverts commit 9468657e8438a1ce8fcb5266403b7bb3539f131f.
* url... and no grow animation on start button
* one next button
* grow instead of shake wifi button
* 36 pt font size in setup
* touch up onboarding a lil
* Revert "rm cpp bz2 (#37332)"
This reverts commit f4a36f7f74.
* more onboarding and clean up
* clean up
* wow what an amazing future clean up
* back to software select
* fix
* copy
* fix dm confirmation dialog not disabling widget underneath, all fixed with real nav stack in here
* uploading
* lint
* add review terms to device w/ close button
* todo
* remove old Terms vertical scrolling classes
* use new Scroller!
* installer
* tweak to match figma exactly
* revert
* fixup updater
* demo day
* demo day v2
* ... for percent while finishing setup
* demo day v3
* demo day v4
* remove ...
* demo day v6 -- "why does it do that!!"
* demo day v7 -- no flash
* hmm
* demo day v7
* prebuilt
* revert demo day
* scroll after pop animation
* back -> retry
* stash fixes
* damn, need back_callback
* scroll over immediately if already in network setup
* tweaks
* going down is confusing
* more
* Revert "more"
This reverts commit 29ce75b1f81eb40e7527a71d27842d9a66802206.
* Revert "going down is confusing"
This reverts commit 0cd2ae30d4135db1ccba6478429b45e886714e9c.
* dupl
* nl
* sort functions
* more clean up from merge
* move
* more
* dismiss to download (hack)
* Revert "dismiss to download (hack)"
This reverts commit 53c45ed1f63db1f0cebbce0dfab1777c8658f505.
* onboarding work
* set brightness and timeout in root onboarding only
* clean up
* type
* keep 5m for settings preview
* switch back to letters on . or /
* reset first step scroller
* custom software warning goes down network comes up and back cb fix
* clean up
* smaller qr
* ReviewTermsPage just for device as NavWidget
* clean up
* installer: stay on 100%
* reset has internet while in wifiui
* try this
* try this
* see what error we get exactly
see what error we get exactly
* not final solution but see how good
* rm
* copy changes
* reset on disconnect
* for separate pr
* Revert "reset on disconnect"
This reverts commit 552372fa4d497ba7d9de7f2edb730ee63798ffa4.
* revert this, too buggy
* fix for updater
* sort
* fix test
* minor cleanup
* more leaks than this rn
* onboarding clean up
* clean up application
* click delay to small button
* clean up
* reset more state
* fix training guide not cleaning up driverview
* Revert "fix training guide not cleaning up driverview"
This reverts commit cac7c5f436056cc9e747f80905d390790fb83c22.
* simpler fix :(
* nice catch, if you go back to terms it will reset 300s timeout and brightness
* duplicate show
* unused
* vendor libyuv from dependencies
* relock libyuv to latest vendor branch
* install cmake in macOS setup when missing
* lock
* unused?
* rm that
* no yuv for the larch
* pressable
* slow
* fast and looks great
* 0.075
* clean up
* fix missing
* clean up
* mici setup use nav stack!
* remove flat state!
* todo
* clean up
* clean up ordering
* clean up
* reset progress on show, dont mutate nav stack from thread
* reset text on show too
* rename
* clean up
i18n(fr): Add French translations for sunnypilot UI
Update 36 existing French translations with corrections and add
369 new sunnypilot-specific translation entries.
Co-authored-by: Jason Wen <haibin.wen3@gmail.com>
Handle exceptions in `getParamsAllKeysV1` to prevent crashes
- Added `try-except` block to improve error handling during key parsing.
- Ensures robustness by logging exceptions and re-raising them.
Co-authored-by: Jason Wen <haibin.wen3@gmail.com>
* jenkins: move panda tests before camera tests
* force this time
* Revert "force this time"
This reverts commit 53508225d39d63b97ff7ecc3a0181a27b5948d1b.
* mici init
* obv
* hybrid
* adapt
* less
* consolidate
* oops
Refactor speed limit alert function to use car state directly.
* no event border for tizi/tici
* abstract it
* less
* nah
* mici init
* obv
* hybrid
* adapt
* less
* consolidate
* oops
Refactor speed limit alert function to use car state directly.
* no event border for tizi/tici
* abstract it
* too soon junior
* refactor
* i like this better
* clean up
* debug
* fix able to click navwidgets that are closing (tested at rc 10)
* add dismiss guards
* fix keyboard so it unselects
* pairing: use dismiss
* main todo
* rm pop_widgets_to!
* reset dismiss state on show event
* debug pop animation bugs
* Revert "debug pop animation bugs"
This reverts commit 9239f2e12cf79b1f75d15d39262fdd15ff5a5200.
* revert
* cmt
* type
* clean up
* now do the todo
* treat using widgets, not idxs, as a separate clean up for later
* actually if not navwidget this is buggy
* fix
* short
* simpler
* clean up
* more
* great clean ups
* better name
* remove useless _can_swipe_away
* reorder
* rename
* state machine is nice but might be too much
* Revert "state machine is nice but might be too much"
This reverts commit f8952969243a2eac3ed5f84793ba7b0c0cdf24bf.
* got a better name out of it though
* clean up
* clean up
* rm!
* rm
* and this
* and
* clean up
* stash
* widgets animate out
* Revert "stash"
This reverts commit eac3493509cff6f2c64111d803c7fef21a1aa2dd.
* abstract
* works also
* works also
* support pop_widget
* only animate top
* callback in request pop
* tune it
* fix
* fix
* try this
* Revert "try this"
This reverts commit 191373a1b35917ee3a361afe73b16eeb60d0a20e.
* debug
* debug
* clean up
* simple test
* clean up
* clean up
* clean up
* clean up
* clean up
* clean up
* clkean up
* re sort
* fine
* yes
* ui sync conflicts with upstream
* md
* ref
* ci
* lint
* more
* more ci
* new new
* tools: block `manage_sunnylinkd` in sim startup script
* try this out
* unbump
* chore: sync tinygrad
Runs great in sim. now we need to rebuild some models
* oops forgot to unblock this after testing
* helpers
* oh yeah
* latest tg
* this wont do anything empriically
* reduce complexity
* okay lint
* Update tinygrad_runner.py
* Update modeld.py
* Update build-all-tinygrad-models.yaml
* tinygrad bump
* Update modeld.py
* Update tinygrad_runner.py
* bump
* Update SConscript
* Update SConscript
* com
* Update fetcher.py
* Update helpers.py
* life is froughtless, when you're thoughtless
* lint
* ozdust ballroom
* shiz
* Update tinygrad_runner.py
* Update tinygrad_runner.py
* slough it off as i do
* try old support one last time
* support mixed input dtypes
* use internal
* dont need that shiz
* Update fill_model_msg.py
* Update onnx_runner.py
* Update onnx_runner.py
* Update model_runner.py
* see if this speeds up execution
if not, revert me
* no
* Update helpers.py
* rebase
* more
* planplus
---------
Co-authored-by: Jason Wen <haibin.wen3@gmail.com>
* add back bz2 support with vendored bzip2
Reverts f4a36f7f7 ("rm cpp bz2") to restore bzip2 decompression
support in replay/cabana tools, and replaces the system libbz2-dev
with a vendored bzip2 package from commaai/dependencies.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* relock bzip2 from releases branch
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* test wifi state machine
* clean up and another few tests
* no unittest :((
* clean up
* clean up
* try to repro on device
* try to repro on device
* nice, the flicker is covered by test_user_initiated_skips_dbus_lookup!
* add todo soon to be all fixed
* documentaiton
* test the thread races too
* _fire -> fire
* duplication
* new state
* fix some tests
* format
* combine similar tests
* use process_callbacks
* clean up
* collapse two tests
* rm nl
* previous messy test
* delete old
* asked another to ask questions
* flasher for Rivian long upgrade
* self-contained no dependency on Panda.F4_DEVICES
* standalone flasher
* move to sp module
* use brand field directly
* use brand field directly
* use brand field directly
* bump
* add some logging
---------
Co-authored-by: Jason Wen <haibin.wen3@gmail.com>
* soundd: trigger timeout warning during MADS lateral-only
The selfdrive timeout alert (warningImmediate) only fires when
selfdriveState.enabled is True. During MADS lateral-only mode,
enabled is False even though the system is actively steering.
If selfdrived stops publishing while MADS lateral is active, the
driver gets no audible warning that steering has become unresponsive.
Add selfdriveStateSP to the SubMaster and check mads.active alongside
selfdriveState.enabled so the timeout alert fires whenever the system
is actuating steering.
* test_soundd: add MADS lateral-only timeout test
Test that the selfdrive timeout warning fires when selfdriveState.enabled
is False but selfdriveStateSP.mads.active is True.
---------
Co-authored-by: Jason Wen <haibin.wen3@gmail.com>
The `steer_limited_by_safety` update in `publish()` is gated by
`selfdriveState.active`, which is False during MADS lateral-only
control. This causes the flag to never update once cruise deactivates
— it stays stuck at whatever value it had during the last ramp-up
(typically True), permanently suppressing the saturation timer in
`_check_saturation` and preventing the "Turn Exceeds Steering Limit"
alert from firing.
Use `CC.latActive` instead, which already accounts for MADS via
`get_lat_active()` in ControlsExt.
Bug was introduced in #446 (MADS), which updated `CC.latActive` to
use `mads.active` but missed updating the `steer_limited_by_safety`
gate in `publish()`.
* should fail
* this works but i think i know a better way
* something like this
* hmm
* this works
* rm useless test
* good stash
* Revert "good stash"
This reverts commit c2dddf0810286cb56e2418dd6f7085c2239e5109.
* replace python3-dev apt install with vendored package
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* keep for agnos
* cleaner
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Reapply "feat(lpa): `at` client + list profiles (#37271)" (#37322)
This reverts commit ddf8abc14a.
* lpa: fall back to ModemManager D-Bus when serial port unavailable
On older devices, ModemManager still claims /dev/ttyUSB2, so the
direct serial open fails. Try serial first; if it can't be acquired,
transparently route AT commands through MM's D-Bus Command() interface.
Co-authored-by: Cursor <cursoragent@cursor.com>
* lpa: add serial/dbus transport labels to debug logs
Co-authored-by: Cursor <cursoragent@cursor.com>
* no
* lint
* here
* const
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* disable forget for tethering
* nets
* put in wifiman
* batch
* Revert "batch"
This reverts commit 9af20c1c7513c22bf9283b2f02514373fa981f50.
* clean up
* more
* more
* use vendored eigen from dependencies repo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* lock
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* use vendored zeromq from dependencies repo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* lock
* rm more crap
* use vendored git-lfs from dependencies repo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* from releases
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* rm extra LLVM install on macOS
* update that
* rm brew cache
* no cache
* Revert "no cache"
This reverts commit a3f8eff234935d4bb27d4bd785ad8a710496a159.
* use vendored zeromq from dependencies repo
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* lock
* rm more crap
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* start
* start
* lil more
* add forget
* fix forget button scrolling
* push right a bit
* fix forget press
* add divider
* fix scroll panel
* better forget and overriding
* revert this
* check icon
* cursor merge conflict fix
* fix rounding and forget btn placement
* scroll indicator
* 65%
* calibrate
* try loading animation
* push to device
* top right
* bottom right
* no red
* top left
* bottom left
* down 2px
* WHY DOES NETWORK MANAGER KEEP CRASHING AHHH
* reduce round trip calls in update_networks
* clean up and combine getallaccesspoint and activeaccesspoint
* cmt
* animate big button over smoothly. super hacky, need to clean up
* animate
* remove old widgets and images
* remove status label, tune loading animation opac back
* connecting is a little buggy still
* add back missing network and don't pop
* some fixes
* "clean up"
* fix lag in animation
* fix adding saved connection to start
* remove saved network to start, divider
* animate up, over, and down
* revert for now
* remove fancy complex animation for now, sorry nick
* remove divider + clean up
* more clean up
* more clean up
* fix forget button press
* cmt
* tweak loading animation behavior
* new lock fix wifi
* rm old lock
* great catch by opus
* clean up
* debug
* fix touch events that are down -> up in one frame (why it only bugged on mici)
* clean up
* eager forgetting
* this SHOULD be full eager forget, more than i thought
* fix wifi slash positioning
* move forgotten networks after saved networks
* temp keep
* test on device
* fix
* see 65
* 5 best
* fix double render double brightness
* can click bottom right now
* disable touch while animating
* fix animation
* can scroll while animating, not tap
* not great yet
* clean up
* didn't work
* always update networks after activation
* stash
* move to update_state
* debug
* debug
* temp
* fix ip and metered flickering when updating at high freq (or rare race condition)
* fix
* if you give it less than 8 chars it never clears connecting
* lock no int
* better wrong password handling
* shake when wrong password
* nm set connecting when it connects on its own
* loading bottom right
* sort connecting first
* sort by unquantized to put strongest first
* clean up
* clean up nm
* clean up nm
* shorter
* fix crash
* 0.5s
* debug
* revert and try something else
* stash
* no
* rev
* use signals
* more
* not wrong password if ever connected after wrong
* similar to gnome shell, don't save connection that never successfully activated.
we do this by creating temporary memory connection with persist: volatile that deletes itself if failed, and then only write to disk when activated
* clean up
* cover all states
* clear if connecting too
* remove pritn
* might need this for CoxWifi
* whoops
* save last pass
* Revert "whoops"
This reverts commit 83a133955246ce32dcf119ededd8b01b3162a866.
* Revert "might need this for CoxWifi"
This reverts commit cddb8b35be152ed154462b188283f9d5a844583d.
* this may be less noisy for low strength networks, but less accurate as previous was reflecting nm state better
* Revert "this may be less noisy for low strength networks, but less accurate as previous was reflecting nm state better"
This reverts commit 740286c846556f32125a96bfe6ecf128300af0d8.
* race condition with volotile not removing conn fast enough/update networks not firing fast enough
* Revert "save last pass"
This reverts commit 7249a58a18b11487fd0370cee36e40a17f7ac521.
* revert some wifiman stuff to master
* not needed
* rm active ap
* remove old dead code
* do after
* always send forgotten callback so we can't be stuck in forgetting state forever
* reproduce race condition where connection removed signal takes a while to remove, then update networks keep is_saved true
* fix from merge
* nice, we can remove some eager code now for treating is_saved as not saved after forgot since it's live
* more
* rm
* simplify passed in callbacks
* clean up
* need this one check back for wrong password to hide forget for a split second
* opus says this is simpler 🤔
* Revert "opus says this is simpler 🤔"
This reverts commit 71472e5b383d7f2083d95ba1188070f41ae14775.
* another attempt
* Revert "another attempt"
This reverts commit 31f30babe656f9cad24399bc2196bb6e7ab79bbd.
* fix from merge
* some lcean up
* fix
* fixes to make work with new animation
* clean up
* this works too
* simplify loading animation behavior for now, revert wifi scan time
* clean up
* temporary fix
* stash
* Revert "stash"
This reverts commit 7471dbdc452807b33b4868a98dd8565681b2e44d.
* stash
* Revert "stash"
This reverts commit e0e5e6e861734320ce5dea5626086784577cb334.
* this check was because is_connected could have been stale from Network as the source
* nm can show connected/connecting to network with 0 aps for a while if strength is low, move out of range under those states
* stash
* Revert "stash"
This reverts commit 5ec3b454d54392523947f6477f551657d3863a6d.
* todo
* todo
* order
* don't need temporary fix anymore
* cmt
* order
* unused i
* stash
* test seemed to work
* simplify
* clean up
* move under
* Revert "move under"
This reverts commit ce940cffb32378cbe5a69edaf6fc9d9cec202e54.
* back
* fix
* already 90% of the way there and not 144 lines
* nice
* lift properly
* lift, wait, move, wait, drop!
* some clean up
* epic, he ran a simulation to turn opacity filter into pixels
* scroll independant move animation without layout!
* move into function
* clean up
* rm
* overlay behind moving item
* Revert "overlay behind moving item"
This reverts commit 598e22363eb66af6496fe5f1eea8e643d4c2adbb.
* simpler overlay under lifted item
* support multiple animations at once
* Revert "support multiple animations at once"
This reverts commit 3ce6c8281053ee4831ceb88cacf66c343fc7d7ff.
* clean up
* cmt
* clean up
* kinda works
* Revert "kinda works"
This reverts commit ff050c6afc058788b3189a0acc202ada17353504.
* clean up
clean up
* clear overlay
* diff report
* don't break more
* split nav widget out
* clean up
* clean up
* fix
* work
* small enough to not be function
* nah we want intflag
* clean up
* always runs
* more clean up
* prep for scroller
* opacity for settings
* clean up layout
* set enabled
* rm
* initial
* start to support nav stack in settings panels + fix some navwidget bugs
* add deprecation warning and move more to new nav stack
* fix overriding NavWidget enabled and do developer panel
* fix interactive timeout and do main
* more device, not done yet
* minor network fixes
* dcam dialog
* start onboarding
* fix onboarding
* do mici setup
* remove now useless CUSTOM_SOFTWARE
* support big ui with old modal overlay
* reset can be old modal overlay, but updater needs new since it uses wifiui
* flip name truthiness to inspire excitement
* all *should* work, but will do pass later
* clean up main
* clean up settiings
* clean up dialog and developer
* cleanup mici setup some
* rm one more
* fix keyboard
* revert
* might as well but clarify
* fix networkinfopage buttons
* lint
* nice clean up from cursor
* animate background fade with position
* fix device overlays
* cursor fix pt1
cursor fix pt2
* rm print
* capital
* temp fix from cursor for onboarding not freeing space after reviewing training guide
* fix home screen scroller snap not resetting
* stash
* nice gradient on top
* 40
* 20
* no gradient
* return unused returns and always show regulatory btn
* nice!
* clean up
* new_modal is always true!
* more clean up
* clean up
* big only renders top 1
* fixup setup and updater
* stash
* Revert "stash"
This reverts commit 3cfb226ccb51869ed1f7d630b5fdd6725ad094d5.
* fix mici keys coming in from top
* clean up
* fix mici dialogs like tici, pop first incase call back pushes
* clever way but not not
* Revert "clever way but not not"
This reverts commit f69d106df61262f049df20cc1a9064ca1e6feeb7.
* more setup
* mici keyboard: fix not disabling below
* cmt
* fix wifi callbacks not running in rare case
* clean up network
* clean up network
* clean up dialog
* pairing
* rm
* todo
* fix replay
* they push themselkves!
* clean up ui_state
* clean up application
* clean up
* stash
* Revert "stash"
This reverts commit 07d3f5f26c99ef891086b6fe03095d53a62b8631.
* typing
* lint
* Chunk tinygrad pkl below GitHub max size
* pull that out
* rm glob
* make work
* Single name def
* unused comment
* more cleanups
* revert that
* 10MB overhead
---------
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
* feat(lpa): implement list_profiles in TiciLPA
Add AT command serial interface, TLV parsing, and ES10x transport
to support listing eSIM profiles (SGP.22 v2.3). TiciLPA is a
singleton that maintains a persistent connection to the modem.
* feat(lpa): close TiciLPA serial connection on exit
Register atexit cleanup so the logical channel and serial port are
released when the process exits, even on crashes or early exits.
* feat(lpa): close stale logical channels on init to prevent timeouts
* trying to brick it
* Revert "trying to brick it"
This reverts commit 46a0467314479c92d2cf331280521a1263f6cc43.
* feat(lpa): remove ensure_capabilities check on init
Target devices are known to support the required AT commands,
so skip the capability probes and stale channel cleanup to
speed up initialization.
* feat(lpa): enable debug logging via DEBUG=1 env variable
* muuuch better
* revert
* cleanup
* constant
* initial
* start to support nav stack in settings panels + fix some navwidget bugs
* add deprecation warning and move more to new nav stack
* fix overriding NavWidget enabled and do developer panel
* fix interactive timeout and do main
* more device, not done yet
* minor network fixes
* dcam dialog
* start onboarding
* fix onboarding
* do mici setup
* remove now useless CUSTOM_SOFTWARE
* support big ui with old modal overlay
* reset can be old modal overlay, but updater needs new since it uses wifiui
* flip name truthiness to inspire excitement
* all *should* work, but will do pass later
* clean up main
* clean up settiings
* clean up dialog and developer
* cleanup mici setup some
* rm one more
* fix keyboard
* revert
* might as well but clarify
* fix networkinfopage buttons
* lint
* nice clean up from cursor
* animate background fade with position
* fix device overlays
* cursor fix pt1
cursor fix pt2
* rm print
* capital
* temp fix from cursor for onboarding not freeing space after reviewing training guide
* fix home screen scroller snap not resetting
* stash
* nice gradient on top
* 40
* 20
* no gradient
* return unused returns and always show regulatory btn
* nice!
* revert selfdrive/ui
* let's do tici first
* bring back ui
* not sure why __del__, SetupWidget was never deleted?
* device "done"
* network "done!!"
* toggles "done"
* software "done"
* developer "done"
* fix onboarding
* use new modal for debug windows
* and aug
* setup "done"
* clean up
* updater "done"
* reset "done"
* pop first before callbacks in case callbacks push
* fix cmt
* not needed
* remove two commented functions for mici
* clean up application
* typing
* static
* not sure what this means
* fix big
* more static
* actually great catch
* fix cmt
* fix
* meh
* unclaud test is best
* yess
* try
* works!
* remove dict handling
* clean up
* more clean up
* remove trash
* fixup
* fix up onboarding again
* fix drivercameradialog
* don't show test window
* more widgets
* fix all
* Revert "fix all"
This reverts commit 42d3537c9314af382961a16443a63faed202b157.
* move and whitelist
* clean up
* more test + ignore
* to fix
* temp
* Revert "temp"
This reverts commit 215ecbb8a8fc0e6826d45b2c0d57999c7a19a400.
* temp
* rev
* reproduce race condition where connection removed signal takes a while to remove, then update networks keep is_saved true
* fix
* Revert "reproduce race condition where connection removed signal takes a while to remove, then update networks keep is_saved true"
This reverts commit cf7044ee955777db16434ab81c520bbe798c9164.
* not anymore
* more clear
* safe guards
nl
* signal driven wifi state
* copy exactly
* copy signal handler
* remove is_connected
* Revert "remove is_connected"
This reverts commit f2246a70f4a29e9f3405947ca43d9404578c9d2d.
* do 3 network
* missing reason
* do wifiui
* clean up mici updater
* rest
* or not connecting
* clean up is_connected
* clean up wifiui
* match wifiui state more exactly in network panel for wifi button
* update active connection info after activation (used to do in _update_networks)
* clean up prints
* more
* rm
* not needed
* clean up state machine a bit
* more
* more
* indent
* final clean up
* debug
* debug
* wait for ip?
* more
* revert
* just to see
* ensure we emit activated even if we fail to get conn path from dbus
* hmm
* fine
* back
* back
* Revert "back"
This reverts commit 6464abe243c2a3bbf62b8f9a109b72ec3ddb3817.
* debug flickering on forget then connect to another. commit before this is good
* fix rare flicker when forgetting network and immediately connecting to
another
* clean up
* clean up router stuff now
* ugh wtf
* stash -- wtf
* Revert "stash -- wtf"
This reverts commit 756a92a9c0530a16917303424e26447f258f17e4.
* Revert "fix rare flicker when forgetting network and immediately connecting to"
This reverts commit 90c5fc14551726765ab2524e7866ee8b3c5dee7c.
* remove debug
* fix
* add issues
* add flow
* match previous behavior
* it doesn't fix the flikcer
* more atomic
* Revert "more atomic"
This reverts commit ead87c5a7a4030719b64138c12b9154ec82e73d9.
* last test!
last test!
* really the race is here?
* atomic wifi_state replace
* not slow
* clean up
* WifiManager: fix all networks showing as connected when no active connection
When there's no active WiFi connection, _get_active_wifi_connection()
returns None. This caused `self._connections.get(ssid) == None` to be
True for all unsaved networks, marking them all as connected.
Co-authored-by: Cursor <cursoragent@cursor.com>
* ltl
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* ui: add edge shadow effect to horizontal scrollers in settings
Adds a black gradient falloff shadow (20x240, 100%→0% opacity) on the
left and right edges of horizontal Scroller panels. Enabled via an
opt-in `edge_shadows` parameter on Scroller for easy per-screen control.
Enabled on: settings menu, toggles, network, device, developer.
Not enabled on: home screen carousel, vertical scrollers, setup screens.
Co-authored-by: Cursor <cursoragent@cursor.com>
* ui: reduce edge shadow opacity to 80%
Co-authored-by: Cursor <cursoragent@cursor.com>
* what on earth is this
* some lines are ok
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Shane Smiskol <shane@smiskol.com>
* init
* no
* more
* tree it
* final
* comment
* only with enforce torque
* only with enforce torque
* missed
* no
* lint
* Apply suggestion from @sunnyhaibin
* sunnylink metadata sync
* Apply suggestion from @sunnyhaibin
---------
Co-authored-by: nayan <nayan8teen@gmail.com>
* refactor: improve video synchronization logic in HTML report generation
* feat: include description of which video is longer in report; refactor stuff and add types
* refactor: simplify HTML report generation and remove extra formatting
* reduce diff
* fix video name
* reduce diff
* reduce diff
* fix
* parentheses
* fix I guess
* Remove gcc@13 installation from mac_setup.sh
Removed installation of gcc@13 from mac_setup.sh.
* no cache
* Revert "no cache"
This reverts commit fc27f7dc9e6dab4b61703433130531f12dbe334b.
Widen the hint label rect so it doesn't reserve right-side space for the
hidden backspace button, preventing unnecessary text eliding. Also show
the blinking cursor over the hint and add trailing ellipsis to hint
strings for consistency.
Co-authored-by: Cursor <cursoragent@cursor.com>
* debug why so slow
* forget after
* i'm not sure why this is a thing
* better forget connecting reset
* ????
* has lag
* fix
* clean up
* should be fine
* Delay lateral reengagement
* UI elements
* Add tests
* Update title and description
* Update params_metadata
* Didn't mean to pass this to int()
* Keep sentry happy
* Title and description update
* always 100 hz
---------
Co-authored-by: Jason Wen <haibin.wen3@gmail.com>
* add networks to end, remove bad scroller restore logic that sometimes starts in the middle
* works
* almost
* wifi slash
* clean up
* clean up
* opactiy
* more clean up
* more clean up
* set enabled and network missing on regain network
* cmt
* Revert "Revert tgwarp again (#37161)"
This reverts commit 45099e7fcd.
* Weird uv sizes
* Fix interleaving
* Fix on CPU
* make CPU safe
* Prevent corruption without clone
* Claude knows speeed
* fix interleaving
* less kernels
* blob caching
* This is still slightly faster
* Comment for blob cache
* like c++ wifiman
* rename to scan
* can do this
can do this
* Revert "can do this"
This reverts commit 295f7f49d448c6aacdde2ef810904df86357840b.
* kinda useless now
* clean up
* fix recent connect regression from connection not being known yet
* always update connections in background, keep track via signals only. no getallconnections each time one is added/deleted. matches c++
* works
* clean up
* clean up
* clean up
* clips: allow mici UI (now default) (#37070)
fix: make big false by default and remove assertion
* comma four: new keyboard enter button (#37072)
* works
* enter dis
* clean up
* clean up
* no debug
* useless
* poadding
* tools: fix Python version comparison using normalized semantic version format (#37075)
* Back to tethering BigButton (#37082)
Back to tethering big button
* Stock LKAS: remove permanent alert (#37083)
rm perm
* BigButton: remove unused scrolling (#37085)
* BigButton: remove unused scrolling
* clean up
* BigButton: use UnifiedLabel (#37086)
* BigButton: remove unused scrolling
* start
* debug
* stash
* actually removing the hardcoded size for multioption fixes it
* back
* cursor does sub label
* clean up
* more
* more
* try this for now
* nick suggest
* clean up
* more
* more
* Network menu improvements (#37077)
* try this
* that's handy
* todo, not sure what happens here
* set_text
* normalize
* scroll wifi
* clean up
* more
* better check
* UI: only show `onroad_fade.png` when engaged (#37051)
* only show when engaged
* retrigger CI
* fade animation 0.1
* nl
---------
Co-authored-by: Shane Smiskol <shane@smiskol.com>
* NavBar: fix no show animation (#37090)
* 1.5 not enough time on small screen
* ohhhh
* clean up
* translations: remove arabic (#37087)
* remove arabic
* more
* bump opendbc (#37091)
* long_mpc: use log.capnp source enum instead of list (#37093)
* Revert "long_mpc: use log.capnp source enum instead of list" (#37095)
Revert "long_mpc: use log.capnp source enum instead of list (#37093)"
This reverts commit 7e959c5a3e.
* mici setup: remove unused functions
* fix mici setup int enum
* clips: improve overlays for mici (#37088)
* adjust overlay sizes and wrap metadata text for mici
* comment
* adjust overlay rendering to dynamically calculate line height for wrapped metadata text
* render time first so we can use width in margin calculation
* update comment (to retry failed CI actually)
* increase metadata size on mici
* longitudinal mpc tuning: behind if main (#37099)
* longitudinal mpc tuning report: add sinusoidal oscillation scenario (#37100)
* long_mpc: use log.capnp source enum (#37096)
* Calibrate in tg (#36621)
* squash
* bump tg
* fix linmt
* Ready to merge
* cleaner
* match modeld
* more dead stuff
* long mpc: state name before subscript (#37101)
* clip: clean up imports (#37104)
* wtf is this
* don't break import timing
* they are the same
* clean up
* good catch
* rm common/mat.h
* Remove all the OpenCL (#37105)
* Remove all the OpenCL
* lil more
* bump msgq
* clip: use wrap_text helper (#37102)
* they are same
* no duplication!
* rm rstrip
* bump opendbc (#37108)
bump
* Delete less dialogs (#37111)
* try
* revert
* this is fine
* revert tg calib and opencl cleanup (#37113)
* Revert "Remove all the OpenCL (#37105)"
This reverts commit d5cbb89d84.
* Revert "rm common/mat.h"
This reverts commit 4ce701150a.
* Revert "Calibrate in tg (#36621)"
This reverts commit 593c3a0c8e.
* fix: route fetch metadata when first log isnt uploaded (#37114)
* fix: route fetch metadata when first log isnt uploaded
* default
* simple
---------
Co-authored-by: Trey Moen <treymoen@amazon.com>
* gitignore .context/
* ui diff replay: remove unused frame_data list for individual frame display (#37117)
Remove unused base64 encoding and simplify frame data handling in diff video report
* bridge: move ZMQ handling over (#37118)
* replace tabulate with simple helper (#37122)
* Better memory usage debugging (#37120)
* Revert "revert tg calib and opencl cleanup (#37113)" (#37115)
* Revert "revert tg calib and opencl cleanup (#37113)"
This reverts commit 51312afd3d.
* power draw is a lil higher
* just don't miss a cycle
* fix warp targets
* fix tinygrad dep
* CI: garbage collect tmp jenkins branches (#37125)
* Build vendored artifacts in CI (#37127)
* Build vendored artifacts in CI
* parallel
* deterministic
* fix up
* fix gitignores
* lil more
* lil more consistency
* remove get_mcu_type from pandad.py (#37132)
* Chunk big model files (#37134)
* file chunking
* try this
* more cleanup
* cleaner
* ui: delay nav bar animation (#37137)
* from da bounce
* try this
* you can get it to clean up wow
* modeld: simplify model run processing (#37138)
Hi! The point of this pr is to make the model run easier to read. On the latest tinygrad numpy().flatten() empirically does the same thing as the internal contiguous().realize().uop.base.buffer.numpy(). numpy() is also documented (docstrings), which can assist new contributors in learning what each potential execution does. Torq_boi or yassine, I know you want proof in the code base, so here it is. As of tinygrad commit 2f55005:
in tinygrad_repo/tinygrad/tensor.py
Lines 316-318 (def _buffer): ensure the tenso is contiguous() and realized() before accessing the raw buffer.
Line 378 (def numpy): Wraps the buffer access and adds a reshape to match the tensor shape.
self._buffer() is what executes contiguous().realize() and returns the buffer object.
Calling numpy() on that buffer object returns a 1D array (defined in tinygrad/device.py:193 via np.frombuffer).
The reshape(self.shape) at the end of Tensor.numpy() then adds dimensions to that 1D array. The added .flatten() removes those dimensions, flattening it back to a 1D array. Effectively the same as what is currently done, but less complex.
* Revert "Chunk big model files (#37134)" (#37139)
This reverts commit a941e8f78f.
* Process replay: move refs to ci-artifacts (#37049)
* rm upload
* use ci-artifacts
* sanitize
* rm ref_commit
* add ci
* handle exept
* bootstrap
* always
* fix
* replay
* keep ref_commit fork compatibility
* remove upload-only
* apply comments
* safe diffs in master
* Revert "safe diffs in master"
This reverts commit 369fccac786a67799193e9152488813c6df20414.
* continue on master diff
* Update .github/workflows/tests.yaml
Co-authored-by: Shane Smiskol <shane@smiskol.com>
---------
Co-authored-by: Shane Smiskol <shane@smiskol.com>
* fix first-interaction action inputs for v3 (#37144)
v3 renamed inputs from kebab-case to snake_case (repo-token -> repo_token,
pr-message -> pr_message). The old names were silently ignored, causing
"Input required and not supplied: issue_message" errors.
* bump create-pull-request action to v8.1.0 (#37143)
The pinned SHA was v6.0.4, which is incompatible with actions/checkout@v6
and causes a "Duplicate header: Authorization" 400 error during git
remote operations. See peter-evans/create-pull-request#4272.
* bump numpy to 2.4.2 (#37145)
* show dependency tree in weekly uv lock job (#37146)
* Revert "DM: Ford GT model" (#37148)
Revert "DM: Ford GT model (#37013)"
This reverts commit 1459d3519d.
* remove dead multilang for mici (#37150)
* ui: remove dead side button (#37151)
* rm side button
* fix
* fix
* BigButton: fix alignment and style (#37153)
* correct from bottom alignment
* temp
* fix scale animation w/ btn_y
* home settings are always 64
* cleanup
* some clean up
* make 23 const
* rev
* more
* remove azure deps (#37084)
* remove azure deps
* fix lint
* restore scripts
* [bot] Update Python packages (#37147)
* Update Python packages
* fix
* bump panda
* revert tinygrad
---------
Co-authored-by: Vehicle Researcher <user@comma.ai>
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
* remove pytest-repeat (#37156)
* BigButton: push up all content when pressed (#37157)
clean implementation
* ui.py: fix stride (#37159)
fix uii.py
* BigButton: don't round drawn content (#37158)
* unround icons
* unround rest
* Revert tgwarp again (#37161)
* Reapply "revert tg calib and opencl cleanup (#37113)" (#37115)
This reverts commit 667f3bb32f.
* revert msgq too
* msgq on master
* newline in updater error
* Remove vertical scroll bar
* Simple scroll indicator (#37162)
* scroll indicator
* 65%
* calibrate
* margin
* cleaner?
* manual clean up
* clean up
* full scroll bar
* look
* looks
* unlook
* no fade, looks good but "too much"
* clean up
* cmt
* Scroll panel: adapt to content size shrinking (#37163)
fix
* WifiManager: sort by known networks (#37164)
sort by known
* mpc tuning report: minor improvements (#37167)
---------
Co-authored-by: David <49467229+TheSecurityDev@users.noreply.github.com>
Co-authored-by: Shane Smiskol <shane@smiskol.com>
Co-authored-by: ugtthis <142481257+ugtthis@users.noreply.github.com>
Co-authored-by: royjr <royjr96@gmail.com>
Co-authored-by: Jason Young <46612682+jyoung8607@users.noreply.github.com>
Co-authored-by: felsager <76905857+felsager@users.noreply.github.com>
Co-authored-by: Harald Schäfer <harald.the.engineer@gmail.com>
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
Co-authored-by: Trey Moen <50057480+greatgitsby@users.noreply.github.com>
Co-authored-by: Trey Moen <treymoen@amazon.com>
Co-authored-by: Andi Radulescu <andi.radulescu@gmail.com>
Co-authored-by: James Vecellio-Grant <159560811+Discountchubbs@users.noreply.github.com>
Co-authored-by: Daniel Koepping <elkoled@gmail.com>
Co-authored-by: ZwX1616 <zwx1616@gmail.com>
Co-authored-by: commaci-public <60409688+commaci-public@users.noreply.github.com>
Co-authored-by: Vehicle Researcher <user@comma.ai>
* new/removed conns signal
* clean up
* only get connections when adding/removing not every refresh
* add debug
* block
* Revert "block"
This reverts commit 30bbffca8d2db21c53d7a3601ae46bf05e2a7cd5.
* rm debug
* block on any new message, faster conn rem/add reaction
* better names
* correct from bottom alignment
* temp
* fix scale animation w/ btn_y
* home settings are always 64
* cleanup
* some clean up
* make 23 const
* rev
* more
The pinned SHA was v6.0.4, which is incompatible with actions/checkout@v6
and causes a "Duplicate header: Authorization" 400 error during git
remote operations. See peter-evans/create-pull-request#4272.
v3 renamed inputs from kebab-case to snake_case (repo-token -> repo_token,
pr-message -> pr_message). The old names were silently ignored, causing
"Input required and not supplied: issue_message" errors.
Hi! The point of this pr is to make the model run easier to read. On the latest tinygrad numpy().flatten() empirically does the same thing as the internal contiguous().realize().uop.base.buffer.numpy(). numpy() is also documented (docstrings), which can assist new contributors in learning what each potential execution does. Torq_boi or yassine, I know you want proof in the code base, so here it is. As of tinygrad commit 2f55005:
in tinygrad_repo/tinygrad/tensor.py
Lines 316-318 (def _buffer): ensure the tenso is contiguous() and realized() before accessing the raw buffer.
Line 378 (def numpy): Wraps the buffer access and adds a reshape to match the tensor shape.
self._buffer() is what executes contiguous().realize() and returns the buffer object.
Calling numpy() on that buffer object returns a 1D array (defined in tinygrad/device.py:193 via np.frombuffer).
The reshape(self.shape) at the end of Tensor.numpy() then adds dimensions to that 1D array. The added .flatten() removes those dimensions, flattening it back to a 1D array. Effectively the same as what is currently done, but less complex.
* Revert "revert tg calib and opencl cleanup (#37113)"
This reverts commit 51312afd3d.
* power draw is a lil higher
* just don't miss a cycle
* fix warp targets
* fix tinygrad dep
* Revert "Remove all the OpenCL (#37105)"
This reverts commit d5cbb89d84.
* Revert "rm common/mat.h"
This reverts commit 4ce701150a.
* Revert "Calibrate in tg (#36621)"
This reverts commit 593c3a0c8e.
* adjust overlay sizes and wrap metadata text for mici
* comment
* adjust overlay rendering to dynamically calculate line height for wrapped metadata text
* render time first so we can use width in margin calculation
* update comment (to retry failed CI actually)
* increase metadata size on mici
* BigButton: remove unused scrolling
* start
* debug
* stash
* actually removing the hardcoded size for multioption fixes it
* back
* cursor does sub label
* clean up
* more
* more
* try this for now
* nick suggest
* clean up
* more
* more
<td>{% if jobs[key]["failures"]|length > 0 %}<details>{% for failure in jobs[key]["failures"] %}<a href="{{ failure['link'] }}">Log for run #{{ failure['run_number'] }}</a><br>{% endfor %}</details>{% else %}{% endif %}</td>
A supported vehicle is one that just works when you install a comma device. All supported cars provide a better experience than any stock system. Supported vehicles reference the US market unless otherwise specified.
<sup>1</sup>openpilot Longitudinal Control (Alpha) is available behind a toggle; the toggle is only available in non-release branches such as `devel` or `nightly-dev`. <br />
<sup>1</sup>openpilot Longitudinal Control (Alpha) is available behind a toggle; the toggle is only available in non-release branches such as `nightly-dev`. <br />
<sup>2</sup>Refers only to the Focus Mk4 (C519) available in Europe/China/Taiwan/Australasia, not the Focus Mk3 (C346) in North and South America/Southeast Asia. <br />
<sup>3</sup>See more setup details for <a href="https://github.com/commaai/openpilot/wiki/gm" target="_blank">GM</a>. <br />
<sup>4</sup>2019 Honda Civic 1.6L Diesel Sedan does not have ALC below 12mph. <br />
@@ -29,17 +29,17 @@ All of these are examples of good PRs:
### What doesn't get merged?
* **style changes**: code is art, and it's up to the author to make it beautiful
* **style changes**: code is art, and it's up to the author to make it beautiful
* **500+ line PRs**: clean it up, break it up into smaller PRs, or both
* **PRs without a clear goal**: every PR must have a singular and clear goal
* **UI design**: we do not have a good review process for this yet
* **New features**: We believe openpilot is mostly feature-complete, and the rest is a matter of refinement and fixing bugs. As a result of this, most feature PRs will be immediately closed, however the beauty of open source is that forks can and do offer features that upstream openpilot doesn't.
* **Negative expected value**: This a class of PRs that makes an improvement, but the risk or validation costs more than the improvement. The risk can be mitigated by first getting a failing test merged.
* **Negative expected value**: This is a class of PRs that makes an improvement, but the risk or validation costs more than the improvement. The risk can be mitigated by first getting a failing test merged.
### First contribution
[Projects / openpilot bounties](https://github.com/orgs/commaai/projects/26/views/1?pane=info) is the best place to get started and goes in-depth on what's expected when working on a bounty.
There's lot of bounties that don't require a comma 3X or a car.
There are a lot of bounties that don't require a comma 3X or a car.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.