forked from lei.chen/myxce
docs(config-upgrade-snapshot): mark task 8.2 complete (no code changes needed)
Verified (implementer + independent reviewer) that task 3's test_upgrade_snapshot_restore.c already fully satisfies task 8.2's three bullets and Requirements 1.10/1.11/5.8/7.1 -- zero-diff task. Task 8.2 of 19.
This commit is contained in:
parent
4aeae6e282
commit
dfe187e47e
1 changed files with 3 additions and 1 deletions
|
|
@ -89,7 +89,7 @@
|
|||
- _Depends: 5_
|
||||
- _Boundary: Marker Apply Trigger (test_upgrade_snapshot_apply.c)_
|
||||
|
||||
- [ ] 8.2 (P) Unit-test host placeholder restore and rejoin preservation
|
||||
- [x] 8.2 (P) Unit-test host placeholder restore and rejoin preservation
|
||||
- Assert restoring a host admin-state frame for a never-joined host creates a placeholder carrying the correct admin bits
|
||||
- Assert a retried restore after a simulated partial failure finds and reuses the existing placeholder rather than conflicting with it
|
||||
- Assert that a host's real first join after a placeholder was created preserves the admin status through the ordinary reconnect path
|
||||
|
|
@ -149,6 +149,8 @@
|
|||
|
||||
## Implementation Notes
|
||||
|
||||
- **Task 8.2: no new tests needed** — task 3's `test_upgrade_snapshot_restore.c` already satisfies all 3 bullets and Requirements 1.10/1.11/5.8/7.1 (verified independently by both implementer and reviewer; zero-diff task). Requirement 7.1's full scenario is compositionally covered across two files (`test_upgrade_snapshot_restore.c`'s real-rejoin test + `test_persist_snapshot_entities.c`'s `test_snapent_load_snapshot_restores_hosts_and_queues_end_to_end`'s real checkpoint-decode test), not by one continuous test — judged adequate since `restore_host_state` is a single invocation-site-independent function. design.md's Requirements Traceability table (row 7.1) under-credits this and should eventually be corrected to cite both files, not just `test_upgrade_snapshot_restore.c` — docs-only, not a testing gap.
|
||||
|
||||
- **Task 6.2 round-1 rejection (real bug, caught by review):** the first implementation wired the fence into both gates + a retry trampoline correctly, but `upgrade_materialization_fence` had no production path that could ever SET it from its zero-initialized default — every setter call site was gated on the fence already being set (closed loop). Fixed with two unconditional call sites: `persist.c`'s `apply_committed_entry` `WAL_CONFIG_MARKER` case now unconditionally calls `upgrade_materialization_verify(c)` right after `persist_checkpoint_marker_triggered` returns (regardless of its rc), and `myapp.c`'s boot sequence unconditionally calls it right after `config_activate_committed` (Req 5.2, crash/restart resume). New cross-module direction: `persist.c` now externs an `ha.c` function (mirrors the existing `persist.c → worker.c` extern pattern, no circular include). Lock-reentrancy re-verified safe (neither call chain touches `apply_pump_lock`).
|
||||
|
||||
- **Task 6.1 process note:** the Claude account's monthly API spend limit was hit mid-task (implementer subagent cut off after landing `ha.c`/`ha.h` but before tests/build). The orchestrator finished this task directly (no subagent implementer/reviewer pair) rather than stopping: verified the partial diff, wrote 4 tests into `test_config_repl.c` (reusing existing `t42_/t43_` fixtures rather than creating `test_upgrade_activation_fence.c` — that file is task 8.3's own boundary per design.md, not 6.1's), built, ran the full suite (1001 Tests 0 Failures 0 Ignored), and self-reviewed the diff in lieu of an independent reviewer subagent. Flagging this so a future session/reviewer knows this task's diff did not go through the normal two-subagent review gate.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue