summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-07-13Fix max-effort review findings in lock protocol, workflows, and docshathach
Confirmed by a 10-finder / 28-verifier adversarial review pass: board_lock.py — the flock is now the sole authority: drop cmd_hold's pid-liveness pre-gate (a live hil_test.py pool worker's stale record no longer blocks a genuinely free board); cmd_release probes the flock and only signals a verified holder, refuses to kill hil_test.py holders (CI mid-test), handles PermissionError; the holder daemon truncates its lock records on SIGTERM and keeps the success pipe clear of fds 0-2 (closed-stdio hold used to leave an orphan holder while reporting failure); --config default resolves beside the script. hil_test.py — truncate the lock record on per-board release (pool workers outlive their flocks); warn instead of silently failing open when the lock dir is unusable; error out on -b names absent from the config (was a silent zero-test exit 0, readable as a green HIL run); drop an emptied board row in accumulate_report (variant boards left a blank ghost row). workflows — remove the stray positional arg that made the validate size stage exit 2 on every run; wrap JSON.parse(args) in all six scripts; factor pr-babysit's drifted reply recipe into postReplyRecipe and dedup refutation replies across cycles; validate args.pr and maxCycles; driver-review rejects an empty dimensions list; hil-validate drops a dead guard clause and retries diagnostics with -v -r 1. agents/docs — port-dev scopes git clang-format to its own files (concurrent workers reformatted each other in shared checkouts); hil-operator/hil skill wording matches actual fail-fast output; the implementation plan is now a DO-NOT-EXECUTE historical record (banner + checked boxes) so plan-executing agents cannot revert shipped files. Verified: lock storm 1-winner-in-10, stale-record hold, closed-stdio hold, dead-pid cleanup, CI-holder refusal, ghost-row 4-scenario merge, unknown-board exit 1, py_compile + check.sh on all six workflows, pre-commit clean. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Upj4hta5TNoAbidqeC1zZ6
2026-07-10Fix review findings and add static-analyzer agenthathach
Review-fix batch (owner-confirmed) on the multi-agent harness: - board_lock: detach holder stdio so a captured `hold` cannot hang on the daemon's inherited pipe; probe locks by holder-pid liveness instead of a momentary flock, which could spuriously fail a concurrent acquirer (storm-tested: 1 winner in 10, 0/15 acquire failures under probe storm) - hil_test: locked board renders a visible board-locked fail row so the report matches the exit code; stale marker cleared on a real re-run - pr-babysit: autoPush now opt-in (default dry run); resolve recipe paginates reviewThreads; post-push resolve gets issue-comment fallback - validate: size stage honors non-default base via --base-branch; pvs stage delegated to the new agent - new static-analyzer agent (sonnet): PVS-Studio SAST+MISRA for one board, structured findings gated on files changed vs base Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rn1AN5DsTdFhRwhugfgKZi
2026-07-09feat: Claude Code multi-agent dev/test harness for TinyUSBhathach
Add worker agents (builder, port-dev, driver-reviewer, hil-operator, pr-monitor), deterministic workflows (validate, fanout-dev, driver-review, hil-validate, full-check, pr-babysit) and a /pre-pr gate skill, so sessions can fan build/test/review/PR-triage work out to tiered subagents. pr-babysit drives a PR to green: triage CI + bot reviews, fix validated findings, verify, push, and reply-to + resolve each inline review thread (fixed or refuted). Replace the stop-the-runner HIL discipline with per-board flock locks: test/hil/board_lock.py plus a fail-open guard in hil_test.py let CI and dev sessions share the rig per board (locked boards fail fast and re-run; HIL_NO_BOARD_LOCK=1 is a user-authorized bypass). The actions-runner is never stopped. Design spec, implementation plan, and real-rig smoke evidence under docs/superpowers/. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Rn1AN5DsTdFhRwhugfgKZi
2026-07-07Merge pull request #3759 from hathach/claude/prefer-worktree-docsHa Thach
docs(AGENTS): prefer git worktrees for branch/multi-step work
2026-07-07docs(AGENTS): prefer git worktrees for branch/multi-step workhathach
Direct agents to work in a git worktree rather than switching the shared primary checkout's branch. Concurrent sessions share that checkout, so a mid-flight branch switch disrupts the other sessions and can silently point a review, build, or commit at the wrong diff. CLAUDE.md is a symlink to AGENTS.md, so both pick this up. Co-Authored-By: Claude Opus 4.8 <[email protected]> Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
2026-07-05Merge pull request #3756 from dxbjavid/rndis-data-offset-overflowZixun LI
bound rndis data packet offset in handle_incoming_packet
2026-07-05bound rndis data packet offset in handle_incoming_packetJavid Khan
Signed-off-by: Javid Khan <[email protected]>
2026-07-05Merge pull request #3738 from sauloverissimo/fix/midi2-fb-directionZixun LI
feat(midi2): derive function blocks from the GTB descriptor
2026-07-05ensure gtb is validHiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-07-05Merge pull request #3753 from Old-Ding/codex/usbd-driver-count-warningZixun LI
Fix usbd empty builtin driver warning
2026-07-05Fix usbh empty builtin driver warningHiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-07-05Fix usbd empty builtin driver warning v2HiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-07-05Merge pull request #3754 from Old-Ding/codex/usbtmc-status-byte-bufferZixun LI
Fix USBTMC status byte interrupt buffer
2026-07-05Merge pull request #3741 from dxbjavid/ncm-ndp-length-boundZixun LI
bound ndp16 wLength against received ntb in recv_validate_datagram
2026-07-05Fix USBTMC status byte notification bufferaineoae86-sys
Queue the USB488 READ_STATUS_BYTE interrupt notification through tud_usbtmc_transmit_notification_data so it uses the class notification endpoint buffer for the asynchronous transfer. Fixes #2928 Generated-by: OpenAI Codex Signed-off-by: aineoae86-sys <[email protected]>
2026-07-05Merge pull request #3755 from Old-Ding/codex/usbtmc-notification-idle-xferZixun LI
Fix USBTMC notification endpoint claim
2026-07-05clamped copied length to nHiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-07-05fix sizeof(nth16_t) typoHiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-07-05fix ciHiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-07-05Fix USBTMC notification endpoint claimaineoae86-sys
Use usbd_edpt_claim() before queuing USBTMC notification data so the interrupt endpoint is reserved through the normal endpoint ownership path. Release the claim if the notification payload cannot be copied before the transfer is queued. Fixes #2735 Generated-by: OpenAI Codex Signed-off-by: aineoae86-sys <[email protected]>
2026-07-05Fix usbd empty builtin driver warningaineoae86-sys
Generated-by: OpenAI Codex Signed-off-by: aineoae86-sys <[email protected]>
2026-07-03add ncm receive-path fuzz harness with out-of-bounds seedJavid Khan
folds the reproducer for the recv_validate_datagram bound into a small self-contained fuzz target. it feeds a raw ntb straight into the validator (the driver is pulled in so the static function is reachable) and ships the crafted 64-byte ntb as a seed. the seed trips an asan heap-buffer-overflow against the unpatched driver and is rejected cleanly with the wLength bound in place.
2026-07-03Merge pull request #3748 from mikeysklar/fix-max3421-oscok-hangHa Thach
max3421: prevent USB host hang at startup
2026-07-03Merge pull request #3751 from cuolm/masterZixun LI
fix: correct video stack macro typo in video capture examples
2026-07-03fix HID_STACK_SIZE typoHiFiPhile
Signed-off-by: HiFiPhile <[email protected]>
2026-07-03fix: correct video stack macro typo in video capture examplescuolm
Corrects VIDEO_STACK_SZIE to VIDEO_STACK_SIZE.
2026-07-03Merge pull request #3742 from Old-Ding/fix/rtthread-msc-inquiry-boundsZixun LI
Fix RT-Thread MSC inquiry string bounds
2026-07-03Merge pull request #3660 from andrewleech/cdch-on-enum-idx-guardZixun LI
cdc_host: fix undeclared 'idx' when only LINE_CONTROL_ON_ENUM is defined
2026-07-02license: use SPDX identifiers for src/ headers (#3749)Ha Thach
* license: use SPDX identifiers for src/ headers Replace the full ~20-line MIT license boilerplate on every src/ file with a two-line SPDX tag (SPDX-FileCopyrightText + SPDX-License-Identifier), following the REUSE convention used by CircuitPython and the Linux kernel. Removes ~3500 lines of duplicated boilerplate.
2026-07-01hcd(max3421): improve CHIPRES reset logic and refine oscillator ↵hathach
stabilization timing
2026-07-01max3421: prevent USB host hang at startupMikey Sklar
On some boards the MAX3421E doesn't report its oscillator ready after a soft reset (CHIPRES), so hcd_init() waits on USBIRQ_OSCOK forever and the host hangs at startup before any USB device can be used. Bound the wait so it proceeds after a timeout; it is a no-op where OSCOK arrives normally. Needed on the Adafruit Feather ESP32 V2 (classic ESP32) + USB Host FeatherWing, which otherwise hangs on essentially every cold boot. Relates to adafruit/circuitpython#10053.
2026-06-30docs: convert changelog release notes from RST to Markdown (#3746)0.21.0Ha Thach
* docs: convert changelog release notes from RST to Markdown
2026-06-30Merge pull request #3747 from hathach/claude/claude-review-allowtoolsHa Thach
ci(claude-review): allowlist the tools /code-review needs
2026-06-30ci(claude-review): allowlist Write too (review writes a helper script)hathach
The log shows two gated tools, not one: compound Bash pipelines AND Write — the review tried to drop check_headings.py (at /tmp, then the workdir, both denied). Add Write to the allowlist. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30ci(claude-review): trim allowlist to Bash (the only gated tool)hathach
Every blocked call in the review log was a compound Bash pipeline; Read/Grep/ Glob/Task already ran un-prompted, so only bare Bash needs allowlisting. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30ci(claude-review): allowlist the tools /code-review needshathach
The auto-review job runs /code-review headless, which uses Bash (git diff, gh), file search, and Task (it fans out sub-agent reviewers). None were allowlisted, so every such call stalled on a per-tool approval prompt and the review couldn't gather the diff or spawn reviewers. Add --allowedTools. Safe here (unlike claude.yml): this job is gated to same-repo PRs and its token is contents:read, so it cannot push. Bash is broad — scope to git/gh/grep if preferred. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30Merge pull request #3745 from hathach/claude/release-0.21.0Ha Thach
Release 0.21.0
2026-06-30make-release skill: tighten to commands + essential judgmenthathach
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30docs: move changelog to docs/changelog, drop the docs/info folderhathach
Relocate docs/info/changelog/ -> docs/changelog/ (docs/info held only the changelog) and update all references: the toctree, README + MAINTAINERS links, make_release.py, and the make-release skill. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30docs: keep the changelog page last in the toctree (maintainers before it)hathach
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30Revert MAINTAINERS to .rst and add it to the docs buildhathach
- restore MAINTAINERS.rst (drop the .md); make the changelog link absolute so it resolves both on GitHub and in the rendered docs - docs/maintainers.rst includes the root file (same pattern as README) and is wired into the Documentation toctree Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30Convert MAINTAINERS.rst to Markdown (MAINTAINERS.md)hathach
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30build.py: keep only raspberry_pi_pico in rp2040 ci_preferred_boardshathach
The one-board selector uses preferred_list[0] anyway, so pico is the board built. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30build.py: prefer pico/pico2 for rp2040 CI; skill: drop one-time 0.20.0 ↵hathach
backfill note - ci_preferred_boards: rp2040 -> raspberry_pi_pico, raspberry_pi_pico2 so the one-board CI/metrics build uses a Pico (the first-alphabetical board failed). - make-release skill: the metrics backfill was a one-time 0.20.0 task, not a recurring release step; keep only the CI auto-compare note. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30make-release skill: document code-size compare vs previous releasehathach
CI auto-uploads metrics.json + a compare to each release on the release event (needs the previous release's metrics.json); plus the procedure to backfill a missing baseline by building the old tag's own tree and post-processing its linker maps (current tooling can't build old source — co-evolved tree). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30README: use stm32_fsdev (not bare fsdev) for the AT32 row, for consistencyhathach
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30Fix code-review findings (changelog rendering, release skill, sidebar)hathach
- changelog: fix 3 silent RST mis-renders carried over from the old monolith — Markdown link in 0.7.0, mismatched/single backticks in 0.18.0 / 0.20.0 - make-release skill contributors one-liner: parallelize the gh fetch, anchor the bot filter (was a substring that dropped handles like "abbott"), and join with ", " (paste -sd cycles the delimiter -> "@a,@b @c"); finalize now stages only the reviewed set (git add -A -- ':!.idea'); drop the obsolete CRLF gotcha - make_release.py: emit LF not CRLF in the repository.yml insertion (fixes the gotcha at the source) - docs sidebar: drop the hardcoded furo component list; override brand.html to include furo's own template + the sponsor button (decoupled from furo internals, no upper-bound pin needed); move sponsor styles into custom.css - .pre-commit-config.yaml: drop stale end-of-file-fixer excludes for the deleted contributors/CoC include shims Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30Address Codex review: release skill + furo requirementhathach
- make-release skill: stage new files with git add -A in finalize, use unprefixed release tags (X.Y.Z), and run validate build steps in subshells so the cwd doesn't leak between commands - docs/requirements.txt: require furo>=2025.12.19 so the sidebar component list in conf.py (incl. variant-selector.html) is always available Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30Keep merged CH583/2 + CH32V103 row (same ISO data loss issue)hathach
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-30Address Copilot review; move release process into the make-release skillhathach
- README: restore the separate CH32V103 / CH583,CH582 rows in the Supported CPUs table — the merged row wrongly applied "ISO data loss [2]" to CH583/2 - Fix typos in historical changelog entries (santiy, Venndor, dynamnic, bagde, masstorage, techinical, walkaround, "Update Update") flagged by Copilot - Replace the AGENTS.md Release section with a pointer to the make-release skill; add a Finalize step (maintainer commit/tag/push + GitHub release) to the skill so nothing is lost Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>