KX
← All projectsKrux

Krux

Open-source signing firmware for Kendryte K210 devices.

BitcoinHardware walletsNormal
Repository coverage

216 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

58security candidates41second-pass queue71AI analyses
39commits · 30 days
59commits · 60 days
100commits · 180 days
216commits · 365 days
Backfill bands
Aug 5 → Feb 6116 seen6 candidatesComplete
Feb 6 → Jun 639 seen3 candidatesComplete
Jun 6 → Jul 622 seen1 candidatesComplete
Jul 6 → Aug 538 seen5 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

65/100 average clarity
59Strong · 80–100
62Adequate · 60–79
79Thin · 40–59
16Opaque · 0–39
6security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Odudex291416272
odudex892932159
Tads361011063
qlrd1622082
kdmukai422066
tadeubas411038
kkdao1204083
Jean Do600078
Naman015501060
bitcoisas500066
Naman Gupta201079
SatsCzar200062
Analysis record

Published AI watches

Last scanned 58 minutes ago

Moderate 66 AI analysisMessage 45 · Thin
KX KruxKrux BitcoinHardware wallets

Merge branch 'release-26.08.0'

This is a routine release merge for Krux firmware (version 26.08.0). It includes several genuine security fixes: a heap buffer overflow in camera-based entropy generation for a discontinued device, stricter fee calculation when signing Bit…

Heap buffer overflow fix in camera entropy module (discontinued Maix Bit only)PSBT fee calculation stricter checks and unverified-input-amount warningStored mnemonic file corruption now preserved instead of overwritten
be5eda28by odudex+4335−3028123 files
Vendor flagged security relevance
Informational 0 AI analysisMessage 40 · Thin
KX KruxKrux BitcoinHardware wallets

chore(Maixpy): bump cUR

This commit appears to be a routine version bump of a component called 'cUR' inside the MaixPy firmware build. No actual code changes are visible in the provided diff, and the commit message gives no indication of a security fix or vulnera…

74d6ed40by odudex+1−11 file
No security note in commit
Informational 2 AI analysisMessage 57 · Thin
KX KruxKrux BitcoinHardware wallets

chore: bump MaixPy with updated glyphs

This commit appears to update a submodule or dependency called MaixPy to a newer version that includes updated visual glyphs (small icons/symbols). The title and message describe it as a routine maintenance chore, not a security fix. No ac…

a9329228by odudex+1−11 file
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
KX KruxKrux BitcoinHardware wallets

fix: register embed_fire in the bdftokff device list

This commit fixes a build-time font-generation script so that a newly supported device ('embed_fire') is recognized. Before the fix, the script printed an error but still produced the same font files. There is no security issue.

f15308e4by odudex+1−01 file
No security note in commit
Moderate 63 AI analysisMessage 57 · Thin
KX KruxKrux BitcoinHardware wallets

docs: add PSBT input amount fixes to CHANGELOG

This commit only updates the project's CHANGELOG.md to document earlier fixes related to PSBT (Partially Signed Bitcoin Transaction) fee and amount handling. It does not contain any code changes itself. The changelog entries describe secur…

Changelog documents prior PSBT fee/amount validation fixesMentions insufficient coordinator data as a security concernNo actual code or test changes in this commit
48920c31by odudex+4−01 file
Vendor flagged security relevance
Moderate 66 AI analysisMessage 85 · Strong
KX KruxKrux BitcoinHardware wallets

fix: reject a PSBT whose outputs exceed its inputs

This commit fixes a bug in Krux, a Bitcoin signing device, where a malformed transaction whose outputs spend more than its inputs could be loaded and shown to the user. Normally such a transaction is impossible on the Bitcoin network, but …

Input validation gap in PSBT parsingUI rendering bug masking invalid transaction economicsPotential social-engineering / user-confusion attack
d6813d88by odudex+52−02 files
Vendor flagged security relevance
High 78 AI analysisMessage 95 · Strong
KX KruxKrux BitcoinHardware wallets

fix: verify PSBT input amounts before showing the fee

This commit fixes a security flaw in Krux, a Bitcoin signing device. Before the fix, an attacker could trick the device into showing a low transaction fee on screen while actually signing a much higher fee. The fix makes the device verify …

Fixes fee-display/sighash amount mismatchAdds prevout txid hash verification for non_witness_utxoMandates non_witness_utxo for legacy inputs
fc808059by odudex+353−122 files
Vendor flagged security relevance
Moderate 62 AI analysisMessage 90 · Strong
KX KruxKrux BitcoinHardware wallets

feat: warn when PSBT input amounts cannot be verified

This commit adds a warning screen to Krux, a hardware signing device, when it is asked to sign a multi-input Bitcoin transaction where the amounts of some inputs cannot be independently verified. The risk is that a malicious transaction co…

New user-facing warning for unverified multi-input SegWit amountsDetection logic tied to BIP143 signature semantics and inp.is_verifiedDoes not enforce previous-transaction inclusion; user can still proceed
518b3314by odudex+159−24 files
Vendor flagged security relevance
Moderate 55 AI analysisMessage 82 · Strong
KX KruxKrux BitcoinHardware wallets

chore: bump MaixPy with Shannon changes and RNG removal

This commit updates a bundled firmware component called MaixPy. The commit message says it fixes a 'Shannon heap overflow,' removes an unused random-number binding, and drops support for one hardware variant (Maix Bit). A heap overflow is …

Commit message explicitly mentions fixing a heap overflowRemoval of an unused cryptographic/randomness binding (os.urandom)Submodule bump only; no source-level patch visible in this commit
5c4ece9aby odudex+1−11 file
Vendor flagged security relevance
Moderate 52 AI analysisMessage 85 · Strong
KX KruxKrux BitcoinHardware wallets

fix: remove Maix Bit and CIF camera support

This commit removes support for an old, discontinued hardware device called the Maix Bit from the Krux Bitcoin wallet firmware. The commit message says the Maix Bit's camera resolution (CIF) was the only one that fed frames larger than QVG…

Buffer overflow / scratch buffer overflow claimed in commit message (49,152 bytes)Removal of vulnerable hardware code path rather than hardening the entropy moduleDiscontinuation of affected device reduces real-world exposure
8090ac73by odudex+11−1279 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 90 · Strong
KX KruxKrux BitcoinHardware wallets

refactor: use native uUR on tests and simulator

This commit is a routine engineering cleanup: it removes a Python-only compatibility layer (a 'shim') used for testing and simulation, and makes the test environment use the same C-language UR encoder/decoder module that the real hardware …

2fe2f5f5by odudex+108−24919 files
No security note in commit
Low 34 AI analysisMessage 62 · Adequate
KX KruxKrux BitcoinHardware wallets

refactor: narrow parse_address fallbacks to EmbitError in wallet.py

This change fixes a bug where pressing a device's cancel/back button during address parsing could be ignored or misreported as an 'invalid address' instead of letting the user exit. The code previously caught every possible error (includin…

Bare exception handler narrowed to specific library exceptionUser-triggered interrupt (KeyboardInterrupt) no longer swallowedRegression test added for interrupt propagation in both code branches
a5fb4737by kkdao+24−32 files
No security note in commit
Moderate 62 AI analysisMessage 93 · Strong
KX KruxKrux BitcoinHardware wallets

fix: reject base58 address with unknown version byte in parse_address

This fix closes a hole where a Bitcoin address that looks valid (correct checksum) but belongs to no known network could be accepted by Krux's address parser. Before the patch, the parser only caught thrown errors; because the underlying l…

Input validation bypass fixedBase58 address version byte not validated before fixLibrary silent failure (None return) not handled by caller
63e8b8e5by kkdao+20−12 files
No security note in commit
Low 34 AI analysisMessage 62 · Adequate
KX KruxKrux BitcoinHardware wallets

refactor: catch Exception, not bare except, in parse_wallet fallbacks

This commit tightens error handling in Krux's wallet parsing. Previously, the code used bare 'except:' clauses that would catch everything, including KeyboardInterrupt and SystemExit. Those special exceptions should normally be allowed to …

Bare except clauses replaced with except Exception to avoid swallowing KeyboardInterrupt/SystemExitNew regression test ensures KeyboardInterrupt propagates through all parse_wallet fallback branchesComments explicitly call out untrusted input and interrupt propagation behavior
6f617710by kkdao+42−72 files
No security note in commit
Low 29 AI analysisMessage 85 · Strong
KX KruxKrux BitcoinHardware wallets

refactor: adapt UR decoding to cUR state machine API

This commit refactors how Krux handles animated QR codes in the 'UR' format. It swaps an older decoder API for a newer state-machine API. The visible change is that transient decoding errors are now ignored while scanning, and only termina…

Error-handling behavior change: transient UR decoder errors are now ignored instead of abortingTerminal error set is narrow (NO_RESULT, INVALID_CHECKSUM); other decoder error states may be silently droppedFirmware submodule MaixPy updated, indicating the actual C decoder API changed
f90219e3by odudex+80−74 files
No security note in commit
Informational 15 AI analysisMessage 95 · Strong
KX KruxKrux BitcoinHardware wallets

test: build embit's C libsecp256k1 for tests

This commit only changes how automated tests are run. It builds a C cryptography library during testing so the test environment matches the real firmware more closely. There is no change to the actual Krux firmware or wallet code, and no s…

ac3ea482by odudex+37−03 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
KX KruxKrux BitcoinHardware wallets

docs: add generated mnemonic flow screenshots

This commit only updates user documentation. It adds new screenshots showing how to create a new wallet mnemonic and updates the script that automatically generates those screenshots. There are no code changes that affect security.

61807e7eby Naman015+39−38 files
No security note in commit
Informational 0 AI analysisMessage 57 · Thin
KX KruxKrux BitcoinHardware wallets

chore: update cUR and k_quirk

The commit title says it is a routine maintenance update ('chore') for two internal items named cUR and k_quirk in the MaixPy firmware file. No diff content is available, and no verified references were supplied, so there is no visible evi…

f4796afeby odudex+1−11 file
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

AI review queuedMnemonics XOR Docs Review (#746)by Odudex · c6c43469 · Oct 21, 2025 · 9 filesMessage 68 · AdequateTriage 12Details
Commit message · Odudex

Mnemonics XOR Docs Review (#746)

* XOR: docs review

---------

Co-authored-by: Tads <tadeubas@gmail.com>

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI review queuedupdate pylint IIby odudex · 0cec63ff · Oct 20, 2025 · 4 filesMessage 28 · OpaqueTriage 0Details
Commit message · odudex

update pylint II

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI review queuedupdate pylintby odudex · 8f1156f7 · Oct 20, 2025 · 2 filesMessage 18 · OpaqueTriage 0Details
Commit message · odudex

update pylint

18/100 · OpaqueMessage clarity
✓ Subject identifies a change! Too few words to establish purpose! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI review queuedupdate beta versionby odudex · e07b7977 · Oct 11, 2025 · 4 filesMessage 28 · OpaqueTriage 0Details
Commit message · odudex

update beta version

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI review queuedfeat: add Mnemonic XOR (SeedXOR) (#727)by qlrd · cc32f6d1 · Oct 11, 2025 · 34 filesMessage 80 · StrongTriage 0Details
Commit message · qlrd

feat: add Mnemonic XOR (SeedXOR) (#727)

* feat: add `Mnemonic XOR` (SeedXOR) as menu entry in `Wallet` settings

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: unusually broad change
Lower-prioritytest: add `wonder_k` board to tests (#740)by qlrd · 88aa2213 · Oct 8, 2025 · 6 filesMessage 98 · StrongTriage 0Details
Commit message · qlrd

test: add `wonder_k` board to tests (#740)

This commit add `board_wonder_k` function to `conftest.py` as well adapt
some tests to cover cases when `multiple_devices` fixture is used.

98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Lower-prioritypr_737 removed EncryptedQR because it was no longer needed, (#739)by Jean Do · 03d6037c · Sep 30, 2025 · 1 fileMessage 100 · StrongTriage 0Details
Commit message · Jean Do

pr_737 removed EncryptedQR because it was no longer needed, (#739)

but some of the tests contained useful hard-coded intermediate
bytestrings for testing basic ECB/CBC/CTR/GCM modes. This
commit recovers these tests -- using kef directly.

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Security candidateupdate Maixpy: SPIFFS load and save cleanupby odudex · e94029a3 · Sep 30, 2025 · 1 fileMessage 45 · ThinInformational 2Details
Commit message · odudex

update Maixpy: SPIFFS load and save cleanup

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Informational 2/100

This commit updates a submodule called MaixPy with a one-line change described as 'SPIFFS load and save cleanup.' No actual code diff is available, and there are no verified references indicating this fixes or introduces a security problem. Based solely on the provided materials, nothing can be determined about security impact.

AI review queuedAdd Vulture to detect dead code (#737)by Tads · dbc344ad · Sep 30, 2025 · 18 filesMessage 53 · ThinTriage 12Details
Commit message · Tads

Add Vulture to detect dead code (#737)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Lower-prioritychore: remove unused `Login._encrypted_qr_code` from `src/krux/pages/login.py` (#736)by qlrd · 065174d3 · Sep 30, 2025 · 1 fileMessage 70 · AdequateTriage 0Details
Commit message · qlrd

chore: remove unused `Login._encrypted_qr_code` from `src/krux/pages/login.py` (#736)

70/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
AI review queuedWork to optimize DatumTool: don't die on contents >30K (#731)by Jean Do · 59df8881 · Sep 30, 2025 · 26 filesMessage 58 · ThinTriage 0Details
Commit message · Jean Do

Work to optimize DatumTool: don't die on contents >30K (#731)

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
second-pass: unusually broad change
Lower-prioritybattery check fix (#735)by Odudex · 7bd59066 · Sep 29, 2025 · 3 filesMessage 51 · ThinTriage 0Details
Commit message · Odudex

battery check fix (#735)

* battery check fix
moves the check further in time to allow ADC to properly get battery voltage.

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Lower-priorityre-enable vertical swipe to leave QR Viewby odudex · 1aab19ab · Sep 27, 2025 · 2 filesMessage 45 · ThinTriage 0Details
Commit message · odudex

re-enable vertical swipe to leave QR View

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidateRefactor btn turbo and other small changes (#734)by Tads · b447216e · Sep 26, 2025 · 21 filesMessage 78 · AdequateInformational 18Details
Commit message · Tads

Refactor btn turbo and other small changes (#734)

* Refactor btn turbo and other small changes

* Added tests to increase coverage of input

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
seed or entropy path
AI analysis · Informational 18/100

This commit is a routine user-interface cleanup. It centralizes how 'fast-forward' and 'fast-backward' button-hold navigation works across keypads, menus, QR transcribe, and seed editors. It also adds swipe gestures in more places and tweaks how the Yahboom device's extra page button behaves. There is no indication it fixes a security vulnerability or introduces a clear one.

AI review queuedDatum info-box adjust (#733)by Odudex · 9ccf3890 · Sep 26, 2025 · 25 filesMessage 68 · AdequateTriage 0Details
Commit message · Odudex

Datum info-box adjust (#733)

---------

Co-authored-by: Tads <tadeubas@gmail.com>

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
second-pass: unusually broad change
Lower-priorityBetter testing of kef compression to prove importance of wbits=-10 (#728)by Jean Do · 6fcc3942 · Sep 24, 2025 · 3 filesMessage 91 · StrongTriage 0Details
Commit message · Jean Do

Better testing of kef compression to prove importance of wbits=-10 (#728)

* better testing of kef compression (same as bbqr) to prove that wbits=-10
demanded in KEF Specifications is truly a necessary detail.
See unit-test test_brute_force_compression_check()'s docstring
to provoke errors w/ bad wbits values during compression.

* Emphasize that KEF is strict about wbits=-10 for compress,
but that implementations may use larger windows during decompress.
* expressed in tests comments (as well as by-hand tests of decompressing
with wbits=-11 to -15, for 100K samples, each having size greater than
wbits.
* expressed in `On compressed versions` section of KEF Specifications

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Security candidateincreased SD Card compatibilityby odudex · bb084dbb · Sep 24, 2025 · 2 filesMessage 35 · OpaqueInformational 15Details
Commit message · odudex

increased SD Card compatibility

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit is a routine changelog update describing improved SD card support in Krux. The actual code change in the MaixPy submodule is not shown in the supplied diff, so no security issue can be identified from the materials provided.

Lower-priorityremove "Reboot" from Login page (#732)by Odudex · 9b035563 · Sep 24, 2025 · 6 filesMessage 68 · AdequateTriage 0Details
Commit message · Odudex

remove "Reboot" from Login page (#732)

* remove "Reboot" from Login page
remove "status bar" when empty
cache has_battery on kboard for performance

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Security candidateClean up touch checks (#730)by Tads · c47eb0af · Sep 23, 2025 · 12 filesMessage 53 · ThinLow 27Details
Commit message · Tads

Clean up touch checks (#730)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
seed or entropy path
AI analysis · Low 27/100

This commit is a code cleanup that centralizes touchscreen checks across the Krux firmware. It replaces scattered checks of `self.ctx.input.touch is not None` with a single flag `kboard.has_touchscreen`, and allows touch settings to remain accessible even when the touch input object is temporarily disabled. There is no direct evidence in the commit of a security vulnerability being fixed, but the change touches input-handling logic and could affect behavior if the flag gets out of sync with the actual touch object state.

Security candidateremoved unsused/deprecated files (#729)by Tads · 86a6bb8f · Sep 23, 2025 · 3 filesMessage 53 · ThinInformational 15Details
Commit message · Tads

removed unsused/deprecated files (#729)

Remove Vagrant file

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Informational 15/100

This commit simply deletes three unused or deprecated files: a Vagrant virtual-machine configuration, a font-build helper script, and the README section that described the deprecated script. There is no change to the actual Krux firmware, wallet logic, or security-sensitive code, so it does not introduce or fix a security vulnerability.

Lower-priorityRefactor key_strength check for simplification and optimization (#725)by Tads · 4a6bbfef · Sep 22, 2025 · 1 fileMessage 58 · ThinTriage 0Details
Commit message · Tads

Refactor key_strength check for simplification and optimization (#725)

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Lower-prioritydecompress wbits- update changelog update docs command on "dan" boardsby odudex · f82e4279 · Sep 22, 2025 · 2 filesMessage 65 · AdequateTriage 0Details
Commit message · odudex

decompress wbits- update changelog
update docs command on "dan" boards

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
documentation-only discount
Security candidateMaixpy deflateIO: Change decompress wbits to 10by odudex · cfda040b · Sep 22, 2025 · 1 fileMessage 45 · ThinInformational 24Details
Commit message · odudex

Maixpy deflateIO: Change decompress wbits to 10

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
boot or update path
AI analysis · Informational 24/100

This commit changes a single setting (wbits from an unknown value to 10) in the MaixPy firmware's deflateIO decompression code. The wbits parameter controls the size of the compression window. Without seeing the actual diff or any vendor explanation, we cannot tell whether this fixes a security bug, improves compatibility, or is just a tuning change. The change is too small and lacks context to confidently classify as a security fix.

Security candidateTools > Device Tests > Touchscreen (#721)by Tads · 0fbdab18 · Sep 22, 2025 · 13 filesMessage 78 · AdequateInformational 18Details
Commit message · Tads

Tools > Device Tests > Touchscreen (#721)

* Tools > Device Tests > Touchscreen

* Fix simulator crash on certain computers (tip from qlrd)

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
seed or entropy path
AI analysis · Informational 18/100

This commit adds a new touchscreen diagnostic tool under Tools > Device Tests and fixes a simulator crash on some computers. It also moves the definition of the PRESSED constant from the input module to a new buttons module across several files. There is no obvious security vulnerability in the changes; it reads mainly as a feature addition and minor code cleanup.

Lower-priorityAdded play btn + chinese videos to docs (#726)by Tads · b82e5a34 · Sep 22, 2025 · 2 filesMessage 53 · ThinTriage 0Details
Commit message · Tads

Added play btn + chinese videos to docs (#726)

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
documentation-only discount