feat(worker-rejoin-resync): wire config fields into xceadmin build (task 1.5)
Add workerResyncWindowMs/workerResyncTimeoutMs to xce.schema.json (minimum:0, matching the optional-scalar-field precedent -- these aren't `required` with a floor like heartbeatInterval, so minimum:1 would be wrong) and to mapping.py's YAML->capnp field table. Regenerate both golden config-build fixtures (task 1.1 grew ClusterConfig's wire layout by 2 fields; full/expected.bin and minimal/expected.bin each grew by exactly 8 bytes). full's fixture YAML now sets real values (900000ms/15000ms); minimal deliberately left untouched (no xce.yaml) per its own locked-down "hosts+queues only" boundary test -- its expected.bin still regenerates to reflect the new default-0 fields. Two new tests assert specific decoded values, not just "build succeeds". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4M5MJM2zK6nU43da267Ku
This commit is contained in:
parent
9f3dfe7903
commit
ce3d391e5e
8 changed files with 81 additions and 9 deletions
|
|
@ -28,7 +28,7 @@
|
|||
- _Boundary: wire codec_
|
||||
- _Depends: 1.1_
|
||||
|
||||
- [ ] 1.5 (P) Wire the new config fields into xceadmin's config-build pipeline
|
||||
- [x] 1.5 (P) Wire the new config fields into xceadmin's config-build pipeline
|
||||
- Add the two new cluster-config fields (the recently-finished reporting window, the reconciliation timeout) to xceadmin's YAML validation schema and its YAML-to-binary field mapping, following the existing `heartbeatInterval`/`inactiveHeartbeatCount` pattern exactly, so an operator can actually set them through `xceadmin config build` — added to the wire schema by task 1.1, but with no configuration path into it until this task
|
||||
- Regenerate the checked-in golden config-build fixtures to match the wire schema's current field set (task 1.1 grew it; the fixtures predate that and no longer match a fresh build)
|
||||
- Observable completion: a YAML config supplying values for both new fields produces a binary that decodes back to those exact values, and the existing golden-fixture regression tests pass again
|
||||
|
|
@ -153,3 +153,4 @@
|
|||
## Implementation Notes
|
||||
- Task 1.3: this task's premise (`src/worker` has no `testsuite/`) is FALSE as of implementation time — real, tracked worker test infrastructure already exists (`src/worker/testsuite/{meson.build,test_*.c}`, 5 passing tests, `suite: 'worker'` registered in meson, `/xce-build worker` already runs it), built by `component-failover-adoption` (commits `ce9f734a`/`331fa024`/`619b119e`, 2026-08-11) weeks before this spec was written. `.kiro/steering/structure.md`, `testing.md:55`, and `build-deployment.md:16` are all stale on this point — worth a `/kiro-steering` sync, out of this feature's boundary to fix. Confirmed directly (fresh build + `meson test -C src/xce.build --suite worker`: 5/5 OK) rather than trusting the finding secondhand. No files changed for this task — closed as satisfied by pre-existing infrastructure.
|
||||
- **Task 4.2 must follow the EXISTING worker testsuite convention**, not the controller aggregator-runner pattern the original task 1.3 text pointed at: each test file is its own standalone Unity executable (own `UNITY_BEGIN()`/`RUN_TEST`/`UNITY_END()`, white-box `#include`s the production `.c` file under test — see `test_resource_sync.c`'s shape) with its own explicit `executable()` + `test(..., suite: 'worker', ...)` block added to `src/worker/testsuite/meson.build`, mirroring `test_controller_connector.c`'s registration exactly. Do not introduce a second, competing test-runner shape.
|
||||
- Task 1.5: `xceadmin config dump`'s `_format_cluster_config` (`build.py`) does not print `workerResyncWindowMs`/`workerResyncTimeoutMs` — an operator can set them via `config build` but can't verify the built value via `config dump`. Confirmed genuinely out of task 1.5's boundary (config-*build*, not config-*dump*) and not required by Requirements 3.7/5.3 as written, but a real, minor observability gap worth a small follow-up task if this becomes a live operator pain point. Not blocking; not added to this plan.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue