Skip to content

Commit 9408778

Browse files
committed
[docs] record PR32 CI correction and issue24 disposition
Signed-off-by: Viwat Vchirawongkwin <viwat.v@chula.ac.th>
1 parent 45fd8cd commit 9408778

1 file changed

Lines changed: 72 additions & 0 deletions

File tree

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<!-- SPDX-License-Identifier: MIT -->
2+
3+
# PR #32 — CI correction and README refresh
4+
5+
## Observed failure
6+
7+
Both initial CI runs at `a6144f4` failed only the complete firmware host suite:
8+
[pull-request run](https://github.com/PyBLE-dev/PyBLE/actions/runs/34618742875)
9+
and [branch-push run](https://github.com/PyBLE-dev/PyBLE/actions/runs/34618673864).
10+
Each ran 1,947 tests with one error and 24 skips. The failing test was
11+
`test_visible_replacement_during_callback_is_rejected_and_preserved` in
12+
`test_v061_hil_preflight_hardening.py`: its replacement file had disappeared.
13+
The firmware shell phase and Android WebView checks passed. Firmware builds
14+
were skipped because their host-test prerequisite failed; they did not report
15+
compiler failures.
16+
17+
The host evidence writer closed its original descriptor before invoking the
18+
validation callback. Linux could reuse that unlinked file's inode number for a
19+
replacement. Cleanup then mistook the replacement for its own output and
20+
removed it. The same lifetime gap existed in the shared v0.6.0-profile writer.
21+
22+
## Correction and boundaries
23+
24+
Both writers now retain the original descriptor until publication checks and
25+
failure cleanup finish. The inode remains reserved while ownership is checked.
26+
Existing replacement files, including replacements with identical bytes, are
27+
rejected without deletion. Descriptor cleanup still occurs on success/failure.
28+
29+
Specification commit `8c7a1ff`, regression commit `0bde1e6`, and implementation
30+
commit `8771c8b` preserve the specification-first red/green sequence. New tests
31+
observe real descriptor lifetime without relying on filesystem inode-reuse
32+
timing. They failed before the correction on this macOS host as well.
33+
34+
Only host qualification tools changed. Firmware runtime, native modules,
35+
board overlays and version pins still match published source `c8f549e` exactly.
36+
No release threshold was relaxed, failed evidence rewritten, board operated,
37+
firmware rebuilt or live website changed.
38+
39+
## Verification before the update push
40+
41+
- Three deterministic inode-lifetime test methods passed for both writers,
42+
including success, failure cleanup and same-byte replacement cases.
43+
- The affected five-file writer/gate suite passed all 80 tests under Python
44+
3.12, including the original failing regression.
45+
- All 42 publication tests and the Markdown link gate passed.
46+
- All six firmware roadmap/ledger tests passed after correcting the old
47+
expectation that v0.6.0 must still be the current public release.
48+
- Website tests: 342 passed across 23 files.
49+
- Clean-room, whitespace and PR-range DCO checks passed.
50+
51+
The full Python 3.12 host suite is also rerun independently. Its final outcome
52+
and the subsequent Ubuntu CI results belong to the PR checks; focused host
53+
tests above are not hardware qualification evidence.
54+
55+
## README and issue #24
56+
57+
The README now links the published v0.6.1 descriptor, exact source, owner
58+
confirmation, recovery material, tutorials, diagram and official examples.
59+
It documents the editable repository URL, branch selection, writable-folder
60+
guidance, multi-file deletion, App source version and offline privacy policy.
61+
Historical v0.6.0 citation metadata remains historical. Prepared store artifacts
62+
are not advertised as proof of a live release or later source changes.
63+
64+
[Issue #24](https://github.com/PyBLE-dev/PyBLE/issues/24) describes the original
65+
automated release-admission checklist, including five hardening results, ten
66+
storage receipts and ten physical App/profile rows. The
67+
[owner-confirmed publication](firmware-v0.6.1-publication-2026-09-11.md) is recorded,
68+
but its retained descriptor still has five pending automated HIL rows. This PR
69+
does not certify all of #24's original criteria and must not auto-close it as
70+
completed. The maintainer may instead explicitly close that original workflow
71+
as superseded by the owner-confirmed publication decision, preserving the
72+
distinction. This follow-up neither closes the issue nor resumes hardware tests.

0 commit comments

Comments
 (0)