Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
7d66689
TS-711: Fix notecard-binary-tests.yml missing inputs section. (#196)
haydenroche5 Jun 12, 2025
4b9da09
card.binary HIL improvements. (#197)
haydenroche5 Jul 1, 2025
bb31eea
TS-713: Fix CRC errors over AUX serial in card.binary HIL tests. (#198)
haydenroche5 Jul 11, 2025
46263e0
NoteSetRequestTimeout (#200)
zfields Aug 22, 2025
8446071
chore: handle zero length request (#201)
zfields Aug 26, 2025
d1b47cd
feat: heartbeat support (#202)
zfields Aug 29, 2025
e6143df
feat: heartbeat callback (#203)
zfields Sep 1, 2025
32a42f7
feat: heartbeat control (#205)
zfields Sep 4, 2025
12db4f1
chore: Doxygen comment public API (#206)
zfields Sep 12, 2025
c983d00
chore: Improve I2C config (#207)
zfields Sep 22, 2025
56d35ef
fix: build for `NOTE_NODEBUG` (#209)
zfields Sep 23, 2025
887edc7
fix: I2C mutex scheme for transactions (#211)
zfields Oct 16, 2025
f001061
chore: Improve `strl*` API portability (#215)
zfields Jan 13, 2026
42e407d
Fix card.binary HIL tests. (#218)
haydenroche5 Jan 22, 2026
0560b73
chore: bring notecard COBS optimizations into note-c (#216)
rayozzie Jan 24, 2026
2bac147
chore: Test COBS functions (#219)
zfields Jan 30, 2026
da6c9e3
fix: GitHub CI publish_ci_image (#220)
zfields Jan 30, 2026
f3b5758
chore: Update patch version (#221)
zfields Jan 30, 2026
d9676b5
ci: skip HIL tests on fork PRs (#226)
m-mcgowan Feb 24, 2026
6479807
refactor: propagate const through internal transmit chain (phase 1 of…
zakoverflow Mar 4, 2026
7fc5c59
CRC fixes (#227)
zfields Mar 4, 2026
40741c8
Fix COBS code-byte count: ceil(u/254) vs floor(u/254) + 1 (#222)
rayozzie Mar 5, 2026
06a616d
style: replace non-ASCII/unicode characters with ASCII equivalents (#…
zakoverflow Mar 5, 2026
ee23896
chore: roll version to 2.5.5 (#231)
zfields Mar 5, 2026
361fe8f
Fix md5srv binary web.post handling and improve CI observability (#235)
haydenroche5 Mar 8, 2026
0d743c8
fix: convert JAtoN from K&R to ANSI C function definition (#234)
zakoverflow Mar 8, 2026
095dbb3
fix: very bad memory leaks in low-memory conditions (#237)
rayozzie Mar 11, 2026
693d3eb
feat: v2.5.6
zfields Mar 11, 2026
eba4fd5
docs: [AI] Add living architecture guidance (#242)
zakoverflow May 22, 2026
2f04f42
docs: publish architecture map in docs site (#243)
zakoverflow May 23, 2026
33cab03
build: add reusable CMake library target for downstream projects (#236)
m-mcgowan Jun 15, 2026
35ea8a1
feat: NotePing() allows for testing to see if a notecard is respondin…
rayozzie Jun 15, 2026
6092bc7
fix: guard CRC sequence number with note lock (#247)
zakoverflow Jul 2, 2026
ee7e7ed
test: assert seqNo advances before note unlock (#248)
zakoverflow Jul 2, 2026
e3979dc
chore: Roll version
zfields Jul 2, 2026
11814b5
feat: AI documentation (#249)
zfields Jul 3, 2026
33c4eeb
fix: silence AppleClang int-to-double limit warnings under -Werror (#…
zfields Jul 16, 2026
9a12cfc
chore: Update to reasonable default for time sync (#250)
zfields Jul 16, 2026
82fc2d5
Fix flaky/hanging note-c card.binary HIL tests (#253)
haydenroche5 Aug 12, 2026
e4fb33a
Bump notestation-client to v3.7.0 in card.binary HIL tests (#255)
haydenroche5 Sep 23, 2026
c381efd
Fix card.binary HIL test build on STM32 Arduino core 3.x (#256)
haydenroche5 Sep 23, 2026
dd18caa
test: assert serial hook never receives read-only c_newline (#223)
zakoverflow Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 18 additions & 0 deletions .cursor/rules/architecture-docs.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
description: Keep architecture documentation current with code changes
globs:
- "**/*"
alwaysApply: true
---

Before non-trivial code changes, read the repository architecture context:

- `AGENTS.md`
- `ARCHITECTURE.md`
- `docs/architecture/architecture.html` when a visual graph or traversal overview helps
- Relevant files under `docs/architecture/`
- `source-research/research-index.md` and relevant source-research artifacts for architecture, dependency, public API, hook, transport, runtime-flow, build-variant, or broad code-generation work

When a change affects module boundaries, public APIs, hook signatures, dependencies, data/control flow, transport behavior, runtime assumptions, or build/test strategy, update the closest relevant architecture docs in the same change. Keep the Markdown docs and `docs/architecture/architecture.html` synchronized when applicable. Update `source-research/` when the same change affects source-derived behavior, dependencies, public APIs, hooks, runtime flow, build variants, or architecture claims.

If no architecture doc update is needed, say so explicitly in the final response or PR notes.
30 changes: 18 additions & 12 deletions .devcontainer/ci/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,24 @@ ENV LC_ALL="C.UTF-8"

# Create Non-Root User
RUN ["dash", "-c", "\
addgroup \
--gid ${UID} \
\"${USER}\" \
&& adduser \
--disabled-password \
--gecos \"\" \
--ingroup \"${USER}\" \
--uid ${UID} \
\"${USER}\" \
groupadd \
--gid ${UID} \
\"${USER}\" \
&& useradd \
--uid ${UID} \
--gid ${UID} \
--no-create-home \
--shell /bin/bash \
--comment \"\" \
\"${USER}\" \
&& mkdir -p /home/\"${USER}\" \
&& chown \"${USER}\":\"${USER}\" /home/\"${USER}\" \
&& groupadd \
--force gpio \
&& usermod \
--append \
--groups \"dialout,plugdev\" \
\"${USER}\" \
--append \
--groups dialout,gpio,plugdev \
\"${USER}\" \
"]

# Add 32-bit binaries to the index.
Expand All @@ -61,6 +66,7 @@ RUN ["dash", "-c", "\
git \
lcov \
libc6-dbg:i386 \
libjson-xs-perl \
make \
nano \
python3-pip \
Expand Down
13 changes: 13 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copilot Instructions

Before making non-trivial code changes in this repository, read:

- `AGENTS.md`
- `ARCHITECTURE.md`
- `docs/architecture/architecture.html` when a visual graph or traversal overview helps
- Relevant files under `docs/architecture/`
- `source-research/research-index.md` and relevant source-research artifacts for architecture, dependency, public API, hook, transport, runtime-flow, build-variant, or broad code-generation work

Keep architecture documentation current with code changes. Update the closest relevant architecture file when a change affects boundaries, public APIs, hook signatures, dependencies, data/control flow, transport behavior, runtime assumptions, or build/test strategy. Keep the Markdown docs and `docs/architecture/architecture.html` synchronized when applicable. Update `source-research/` when the same change affects source-derived behavior, dependencies, public APIs, hooks, runtime flow, build variants, or architecture claims.

If a change is implementation-only and does not require architecture doc updates, mention that explicitly in PR notes.
92 changes: 81 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ on:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
inputs:
force_build:
description: 'Force rebuild and publish Docker image (even if Dockerfile unchanged)'
required: false
type: boolean
default: false

jobs:
check_dockerfile_changed:
Expand All @@ -30,7 +37,7 @@ jobs:
build_ci_docker_image:
runs-on: ubuntu-latest
needs: [check_dockerfile_changed]
if: ${{ needs.check_dockerfile_changed.outputs.changed == 'true' }}
if: ${{ needs.check_dockerfile_changed.outputs.changed == 'true' || inputs.force_build == true }}

steps:
- name: Checkout code
Expand Down Expand Up @@ -61,6 +68,24 @@ jobs:
name: note_c_ci_image
path: /tmp/note_c_ci_image.tar

check_architecture_docs:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Check architecture docs do not reference removed JSON map
run: |
architecture_json_pattern='architecture[.]''json'
embed_script_pattern='embed-architecture''-json'
for pattern in "$architecture_json_pattern" "$embed_script_pattern"; do
! grep -R "$pattern" \
AGENTS.md ARCHITECTURE.md CLAUDE.md GEMINI.md \
.github/copilot-instructions.md .cursor/rules/architecture-docs.mdc \
docs
done

build_docs:
runs-on: ubuntu-latest
if: ${{ always() }}
Expand Down Expand Up @@ -99,6 +124,22 @@ jobs:
run: |
docker run --rm --volume $(pwd):/note-c/ --workdir /note-c/ --entrypoint ./scripts/check_libc_dependencies.sh ghcr.io/blues/note_c_ci:latest

run_integration_tests:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Configure add_subdirectory integration test
run: cmake -S test/integration -B build-integration

- name: Build add_subdirectory integration test
run: cmake --build build-integration --parallel $(nproc)

- name: Run add_subdirectory integration test
run: ctest --test-dir build-integration --output-on-failure

run_unit_tests:
runs-on: ubuntu-latest
if: ${{ always() }}
Expand Down Expand Up @@ -188,26 +229,55 @@ jobs:
run: |
docker run --rm --volume $(pwd):/note-c/ --workdir /note-c/ --entrypoint ./scripts/run_cppcheck.sh ghcr.io/blues/note_c_ci:latest

run_macos_unit_tests:
# Stay on macos-latest (currently macOS 26 / Xcode 26.5). Integer limit
# comparisons in n_cjson.c / n_ftoa.c use explicit (JNUMBER) casts so
# AppleClang -Wimplicit-const-int-float-conversion does not fail -Werror.
runs-on: macos-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Configure
run: cmake -B build -DNOTE_C_BUILD_TESTS=ON

- name: Build
run: cmake --build build --parallel $(sysctl -n hw.ncpu)

# NOTE: ctest is not run here. A subset of tests that rely on FFF
# symbol interposition fail on macOS due to two-level namespace
# linking. The build step above verifies that all sources and tests
# compile and link successfully.
#
# Even with -Wl,-flat_namespace, intra-library calls within the
# note_c dylib are resolved at link time as direct calls, so FFF
# fakes in the test executable cannot interpose them. Fully fixing
# this would require linking note-c as a static library for tests
# or using a different mocking approach on macOS.

publish_ci_image:
runs-on: ubuntu-latest
# Make sure unit tests unit tests passed before publishing.
needs: [build_ci_docker_image, run_unit_tests]
# Only publish the image if this is a push event and the Docker image was rebuilt
if: ${{ github.event_name == 'push' && needs.build_ci_docker_image.result == 'success' }}
# Only publish the image if this is a push event (or manual trigger with force_build) and the Docker image was rebuilt
if: ${{ (github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.force_build == true)) && needs.build_ci_docker_image.result == 'success' }}

steps:
- name: Download image artifact
uses: actions/download-artifact@v4
with:
name: note_c_ci_image
path: /tmp

- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Push image to registry
uses: docker/build-push-action@v4
with:
push: true
tags: ghcr.io/blues/note_c_ci:latest
- name: Load and push image
run: |
docker load --input /tmp/note_c_ci_image.tar
docker push ghcr.io/blues/note_c_ci:latest
Loading
Loading