Bug Description
The node_secret_invalid → rate limit death spiral described in #349 was marked as fixed in v1.43.0, but I am still experiencing it in v1.69.5.
Environment
- OS: Ubuntu (WSL2) + Windows 11
- evolver version: 1.69.5
- Node ID: node_9613d0c91c0c
- Hub: https://evomap.ai
Steps to Reproduce
- Run node index.js --loop with a valid registered node
- Hub returns node_secret_invalid (403) on heartbeat
- Daemon triggers re-auth: hello with rotate_secret: true
- Hub responds: hello OK (secret rotated) but does NOT include the new secret in the response body
- Log shows: hub did not return a new secret (rotate may not have taken effect)
- Heartbeat still fails → re-auth again → another hello → another rotated but no secret
- Loop burns through 60 hello/hour rate limit in ~30 minutes
- Node goes offline
Expected Behavior
Hub should either:
- (A) Include the new node_secret in the hello response when rotate_secret: true, OR
- (B) Not claim secret rotated if the rotation did not actually happen
Actual Behavior
Hub says secret rotated but does not return the new secret. Daemon continues using stale secret → infinite re-auth loop → rate limit exhaustion.
Relevant Log Lines
[lifecycle] heartbeat auth failed (403): {error:node_secret_invalid}
[lifecycle] re-auth: hub did not return a new secret (rotate may not have taken effect)
[Hello] Hub returned 429: {error:hello_rate_limit: max 60/hour per IP}
Additional Context
Bug Description
The node_secret_invalid → rate limit death spiral described in #349 was marked as fixed in v1.43.0, but I am still experiencing it in v1.69.5.
Environment
Steps to Reproduce
Expected Behavior
Hub should either:
Actual Behavior
Hub says secret rotated but does not return the new secret. Daemon continues using stale secret → infinite re-auth loop → rate limit exhaustion.
Relevant Log Lines
[lifecycle] heartbeat auth failed (403): {error:node_secret_invalid}
[lifecycle] re-auth: hub did not return a new secret (rotate may not have taken effect)
[Hello] Hub returned 429: {error:hello_rate_limit: max 60/hour per IP}
Additional Context