Skip to content

chore(baseline-205): fix teensylc env name + capture #205 AC baseline#220

Merged
zackees merged 1 commit intomainfrom
chore/fix-baseline-205-teensylc-env
May 10, 2026
Merged

chore(baseline-205): fix teensylc env name + capture #205 AC baseline#220
zackees merged 1 commit intomainfrom
chore/fix-baseline-205-teensylc-env

Conversation

@zackees
Copy link
Copy Markdown
Member

@zackees zackees commented May 10, 2026

Summary

ci/measure_baseline_205.py's TARGETS list used `teensyLC` (camelCase), but the env key in `tests/platform/teensylc/platformio.ini` is `teensylc` (lowercase). fbuild's env lookup is case-sensitive — every prior run errored `config error: environment 'teensyLC' not found`. With the name corrected, all four targets build cleanly.

Captured baseline (release, arm-none-eabi-size)

env TUs .text .data .bss .dmabuffers
teensylc 68 6,980 380 1,068 192
teensy30 68 6,684 272 1,120 248
teensy41 85 n/a 3,776 1,664 n/a
stm32f103c8 201 12,192 240 1,012

Quick AC read for #205

  • AC#1 (teensylc Blink ≤ 250 TUs, .bss ≤ 3 KB): met (68 TUs, 1,068 B).
  • AC#2 (teensy30 .dmabuffers ≤ 1 KB): met (248 B).
  • AC#3 (teensy41 builds): met.
  • AC#4 (stm32f103c8 builds + SPI auto-discovered): builds; SPI attribution requires inspecting compile_commands separately (follow-up).

Caveat — script methodology

The "excluded library hits" scan counts every substring match in `compile_commands.json`, including `-I.../libraries/` flags propagated to every TU. That is why FNET/Snooze/RadioHead each show "68 entries" on teensylc — the count equals the TU count because the include path is on every TU, not because 68 FNET sources were compiled. Functional AC#1 ("FNET / Snooze / RadioHead / mbedtls not compiled") still requires inspecting the `file` fields, not the `arguments` fields. Tracked as a follow-up.

Test plan

  • `uv run python ci/measure_baseline_205.py --out tasks/baseline-205.md` runs to completion locally
  • All four targets reach `status: ok` in the build-status table

Refs: #205 AC#1-#4.

🤖 Generated with Claude Code

The TARGETS list in `ci/measure_baseline_205.py` used `teensyLC`
(camelCase), but the env key in `tests/platform/teensylc/platformio.ini`
is `teensylc` (lowercase). fbuild's env lookup is case-sensitive, so
every prior run errored:
`build failed: invalid environment 'teensyLC': config error: environment
'teensyLC' not found`. With the name corrected, all four targets build
cleanly.

Captured numbers (release, host arm-none-eabi-size):

| env         | TUs | .text  | .data | .bss  | .dmabuffers |
|-------------|----:|-------:|------:|------:|------------:|
| teensylc    |  68 |  6,980 |   380 | 1,068 |         192 |
| teensy30    |  68 |  6,684 |   272 | 1,120 |         248 |
| teensy41    |  85 |   n/a  | 3,776 | 1,664 |        n/a  |
| stm32f103c8 | 201 | 12,192 |   240 | 1,012 |          —  |

Quick AC read for #205:

- AC#1 (teensylc Blink ≤ 250 TUs, .bss ≤ 3 KB): met (68 TUs, 1,068 B).
- AC#2 (teensy30 .dmabuffers ≤ 1 KB): met (248 B).
- AC#3 (teensy41 builds): met.
- AC#4 (stm32f103c8 builds + SPI auto-discovered): builds; SPI
  attribution requires inspecting compile_commands separately.

Caveat: the script's "excluded library hits" scan counts every
substring match in compile_commands.json, including `-I.../libraries/<lib>`
flags propagated to every TU. That is why FNET/Snooze/RadioHead each
show "68 entries" on teensylc — the count equals the TU count because
the include path is on every TU, not because 68 FNET sources were
compiled. The functional AC#1 ("FNET / Snooze / RadioHead / mbedtls
not compiled") still requires inspecting the `file` fields, not the
`arguments` fields. Tracked as a follow-up.

Refs: #205 AC#1-#4.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 10, 2026

Warning

Rate limit exceeded

@zackees has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 22 minutes and 1 second before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d7066fbf-45c5-49e8-8139-549d5b779e37

📥 Commits

Reviewing files that changed from the base of the PR and between fffb1b4 and 52b5175.

📒 Files selected for processing (2)
  • ci/measure_baseline_205.py
  • tasks/baseline-205.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/fix-baseline-205-teensylc-env

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@zackees zackees merged commit 6b7fb4b into main May 10, 2026
77 of 78 checks passed
zackees added a commit that referenced this pull request May 10, 2026
…nsylc env, add CI badges

Three final polish items before closing #205.

## test — `r04_pass2_reconciliation_catches_cpp_only_dependency`

The canonical "why 2-pass beats single-pass BFS" scenario, which the
existing 16-test suite was missing as an explicit guard:

- Project includes `<SPI.h>`. `SPI.h` is silent (no transitive includes).
- `SPI.cpp` is the *only* place that includes `<Wire.h>`.

A single-pass BFS over headers selects {SPI} and silently misses Wire —
link-time undefined symbols. The LDF's pass 2 re-seeds with each
selected lib's full source set, so Wire is reached and selected. Test
asserts {SPI, Wire} and is the regression guard against accidentally
collapsing the resolver back to a single pass. Brings the resolver test
count to 17 (10 LDF + 7 cache).

## fix — teensylc acceptance gate env name

`tests/teensylc_acceptance.rs` passed `env_name: "teensyLC"`
(camelCase) and looked up `compile_commands.json` under
`<build>/teensyLC/`. The actual env in
`tests/platform/teensylc/platformio.ini` is `[env:teensylc]`
(lowercase) — same case-sensitivity bug fixed in #220 / #221 for
`measure_baseline_205.py`. The acceptance gate has been failing on
every run (including main) for this reason.

## badges

Adds badges for the two #205 workflows to README.md's CI status block:

- `acceptance-205.yml` — AC#1 (teensyLC) and AC#4 (stm32 SPI) gates
- `bench-205.yml` — P-02 (cold) / P-03 (scanner) / P-01-mini (warm)
  perf gates

Both have been live since #211 / #210 but were not discoverable from
the README.

Refs: #205.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
zackees added a commit that referenced this pull request May 10, 2026
…nsylc env, add CI badges

Three final polish items before closing #205.

## test — `r04_pass2_reconciliation_catches_cpp_only_dependency`

The canonical "why 2-pass beats single-pass BFS" scenario, which the
existing 16-test suite was missing as an explicit guard:

- Project includes `<SPI.h>`. `SPI.h` is silent (no transitive includes).
- `SPI.cpp` is the *only* place that includes `<Wire.h>`.

A single-pass BFS over headers selects {SPI} and silently misses Wire —
link-time undefined symbols. The LDF's pass 2 re-seeds with each
selected lib's full source set, so Wire is reached and selected. Test
asserts {SPI, Wire} and is the regression guard against accidentally
collapsing the resolver back to a single pass. Brings the resolver test
count to 17 (10 LDF + 7 cache).

## fix — teensylc acceptance gate env name

`tests/teensylc_acceptance.rs` passed `env_name: "teensyLC"`
(camelCase) and looked up `compile_commands.json` under
`<build>/teensyLC/`. The actual env in
`tests/platform/teensylc/platformio.ini` is `[env:teensylc]`
(lowercase) — same case-sensitivity bug fixed in #220 / #221 for
`measure_baseline_205.py`. The acceptance gate has been failing on
every run (including main) for this reason.

## badges

Adds badges for the two #205 workflows to README.md's CI status block:

- `acceptance-205.yml` — AC#1 (teensyLC) and AC#4 (stm32 SPI) gates
- `bench-205.yml` — P-02 (cold) / P-03 (scanner) / P-01-mini (warm)
  perf gates

Both have been live since #211 / #210 but were not discoverable from
the README.

Refs: #205.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
zackees added a commit that referenced this pull request May 10, 2026
…nsylc env, add CI badges (#222)

Three final polish items before closing #205.

## test — `r04_pass2_reconciliation_catches_cpp_only_dependency`

The canonical "why 2-pass beats single-pass BFS" scenario, which the
existing 16-test suite was missing as an explicit guard:

- Project includes `<SPI.h>`. `SPI.h` is silent (no transitive includes).
- `SPI.cpp` is the *only* place that includes `<Wire.h>`.

A single-pass BFS over headers selects {SPI} and silently misses Wire —
link-time undefined symbols. The LDF's pass 2 re-seeds with each
selected lib's full source set, so Wire is reached and selected. Test
asserts {SPI, Wire} and is the regression guard against accidentally
collapsing the resolver back to a single pass. Brings the resolver test
count to 17 (10 LDF + 7 cache).

## fix — teensylc acceptance gate env name

`tests/teensylc_acceptance.rs` passed `env_name: "teensyLC"`
(camelCase) and looked up `compile_commands.json` under
`<build>/teensyLC/`. The actual env in
`tests/platform/teensylc/platformio.ini` is `[env:teensylc]`
(lowercase) — same case-sensitivity bug fixed in #220 / #221 for
`measure_baseline_205.py`. The acceptance gate has been failing on
every run (including main) for this reason.

## badges

Adds badges for the two #205 workflows to README.md's CI status block:

- `acceptance-205.yml` — AC#1 (teensyLC) and AC#4 (stm32 SPI) gates
- `bench-205.yml` — P-02 (cold) / P-03 (scanner) / P-01-mini (warm)
  perf gates

Both have been live since #211 / #210 but were not discoverable from
the README.

Refs: #205.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant