Project progress
| Document version | Date | Summary |
|---|---|---|
| v1 | 2026-07-18 | Initial progress record |
| v2 | 2026-07-20 | Record completion of E08 architecture planning |
| v3 | 2026-07-24 | Archive the completed v0.2.0 progress and clear the active table |
| v4 | 2026-07-27 | Record completed v0.3.0 work through E20 |
| v5 | 2026-07-27 | Refine E20 around the T-Display family and selectable board variants |
| v6 | 2026-07-28 | Record E21 component selection and desktop reader isolation |
| v7 | 2026-07-28 | Record E21 completion after the embedded and probe coverage boundaries |
| v8 | 2026-07-28 | Record E22 completion after the greet presentation rule |
| v9 | 2026-07-28 | Record compact documentation portal route titles |
| v10 | 2026-08-01 | Archive the completed v0.3.0 progress and clear the active table |
This append-only table records completed project tasks. Add one concise row after a task satisfies its acceptance criteria. Do not record incomplete work as progress.
Completed v0.1.0 progress is archived in release v0.1.0.
Completed v0.2.0 progress is archived in release v0.2.0.
Completed v0.3.0 progress is archived in release v0.3.0.
The table below records work after v0.3.0.
| Date | PBI or task | Outcome | Verification | Notes |
|---|---|---|---|---|
| 2026-08-03 | E24, PBI-086, PBI-087, PBI-102 | Accepted the v0.4.0 version architecture, recorded the format version 1 compatibility promise, then reversed the wall-clock exclusion and accepted ADR-012 for the save stamp and the bounded absence | Documentation-only task with no compiler check, reviewed against the specification, the general architecture, the milestone, the epic map, and the arc42 policy | The payload becomes 84 bytes, PET_ABSENCE_MAX_MS is seven days, a host with no clock stays supported, LIM-014 narrows to what an absence does not yet mean, and the host support layer idea is closed because components/ answered it |
| 2026-08-03 | E25, PBI-088, PBI-089 | Recorded format version 1 in ADR-013 and implemented the encoder as pet_world_save over caller-owned storage, with include/pet/save.h, src/save.c, and a bitwise CRC-32 | ./pet.py verify all passed the strict gate over desktop SDL and headless under GCC, Clang, ASan, and UBSan, with 99 formatted files, Cppcheck, Clang-Tidy, the Core symbol scan, 10 probed public operations, and 18 headless public headers compiling alone | 20 encoder tests including a byte-for-byte golden payload. The decoder, the absence transition, and the round trip belong to E26 |
| 2026-08-03 | E26, PBI-090, PBI-091 | Implemented pet_world_load with the candidate world, the rejection order, and the bounded absence, and added PET_ERR_UNSUPPORTED_VERSION so a newer save is not reported as damage | ./pet.py verify all passed the strict gate over desktop SDL and headless under GCC, Clang, ASan, and UBSan, with 11 probed public operations, 0 probe allocations, the Core symbol scan, and 18 headless public headers compiling alone | 36 loader tests. Identification now runs before the length rule, so a longer future payload reports its version. The Clang memcpy and memset object budgets moved from 2 to 3 for save.c |
| 2026-08-03 | E27, PBI-092, PBI-093 | Added components/storage with its contract, the validating pet_storage_read and pet_storage_write calls, and the PET_STORAGE_STDIO implementation that writes through a temporary file and replaces the target, recorded in ADR-014 | ./pet.py verify all passed the strict gate over desktop SDL and headless under GCC, Clang, ASan, and UBSan, with 107 formatted files, Cppcheck, Clang-Tidy, the Core symbol scan, and 19 headless public headers compiling alone | 10 storage tests covering dispatch validation, a round trip, replacement, a missing payload, a payload over the buffer, and a failed write leaving the previous one intact. The memory double and the embedded evidence belong to PBI-094 and PBI-095 |
| 2026-08-03 | E27, PBI-094, PBI-095 | Added the memory double and the contract tests both implementations satisfy, then added components/storage to the ESP-IDF build and recorded the embedded evidence with LIM-015 for the absent non-volatile implementation | ./pet.py verify all passed the strict gate over desktop SDL and headless under GCC, Clang, ASan, and UBSan. ESP-IDF v6.0.2 for esp32 built the firmware, the embedded boundary check held over 12 project sources, and the tool suites ran 211 tests | 23 storage tests. The cross build compiles src/storage.c and no implementation, config/verification.json now carries the component in its embedded and desktop roots, and E27 is complete |
| 2026-08-03 | E28, PBI-096, PBI-097, PBI-098 | Added the shared pet::app_persistence load and save sequence, gave both hosted applications --load, --save, and --now, restructured the headless application into sources and tests of its own, and added the process-level round trip check | ./pet.py verify all passed the strict gate over desktop SDL and headless under GCC, Clang, ASan, and UBSan, with 127 formatted files, Cppcheck, Clang-Tidy, the include boundaries, the Core symbol scan, 11 probed public operations, and 23 headless public headers compiling alone | Storage failures fall in the app range and payload rejections in the Core range, so a missing file exits 1 and a damaged one exits 2. The round trip check writes a real payload under the build directory, asserts a chosen absence through --now, and rejects a lengthened, a replaced, and a removed payload. E28 is complete |
| 2026-08-04 | E29, PBI-099, PBI-100, PBI-101 | Closed the v0.4.0 release verification by recording LIM-017 for the absent session continuity, writing docs/releases/v0.4.0/evidence.md, setting the project version to 0.4.0, and hardening the version architecture and the support claims | ./gate.py audit --all-compositions passed from a clean tree with 12 desktop and 11 headless tests under GCC, Clang, ASan, and UBSan, 100% Core line and branch coverage, 0 probe allocations over 11 public operations, and 211 tool tests. ESP-IDF v6.0.2 rebuilt the esp32 firmware at 0x1e120 bytes with the storage contract compiled and no implementation | The first audit run reported 181 of 184 branches, so the magic rejection test now damages each of the four positions. All twenty release exit criteria are ticked, and tagging and the documentation rollover remain maintainer steps |