Repository navigation
fix(deploy): preserve user-managed Context connectors - #1483
alfredolopez80 wants to merge 19 commits into
Conversation
…connectors * origin/dev: fix(e2e): keep every kill attempt's node log and report a watcher that ended early fix(hcc): reach the overrun and call-failure counters only through typed helpers docs(hcc): correct claims about the request timeouts and the hard limit docs(hcc): say what the pass hard limit does not do fix(e2e): continuity lane retries after NO_PASS_START and arms its watcher without a gap fix(mcp-host): accept plain digits only for HCC_AUTHORITY_MAX_STALENESS_MS fix(hcc): expose every pass-overrun and call-failure series at zero fix(hcc): refuse a request timeout that is not below the pass hard limit fix(hcc): accept plain digits or an empty value for the request timeouts and the pass hard limit test(hcc): pin the write-attempt signal of the Service and ConfigMap sync docs: describe the HCC request deadline, the pass hard limit and the mcp-host staleness floor test(e2e): add an HCC restart lane that proves the fleet is not disturbed fix(mcp-host): require an authority staleness bound that survives two missed polls fix(hcc): bound the NetworkPolicy pass and keep ready verdicts over transient failures
|
The regression this PR fixes reproduced on
After the deploy, On the HCC side the rewrite was absorbed: the NetworkPolicy pass running at that moment ended This confirms the failure on the deployed cluster. It does not validate the fix: that needs a dev deploy whose base SHA contains this PR, followed by the same check that |
…e-628-context-connectors * commit '1b1b1131ef784929f7f5551c509f0aa2f4b19de6': fix(workflow-recipes): never report a pod that is being deleted as ready test(workflow-recipes): return the PodReadiness kind from readiness mocks fix(workflow-recipes): fail the pass when patchStatus cannot read the live recipe fix(workflow-recipes): give no readiness verdict while the mcp-host pod is absent fix(workflow-recipes): start the mcp-host readiness window at the later of run or pod start docs(crds): state that backoffSeconds retry waits are capped at 300 s test(workflow-recipes): probe healthCheck against the real runner server, drop the abort pin test(workflow-recipes): cover resume with a snippet step persisted as running docs(crds): state the maxRetries backoff formula fix(workflow-recipes): release the snippet-runner health response after reading its status fix(workflow-recipes): wait for the snippet runner only when a remaining step needs it chore(workflow-recipes): forward workflow step tuning env to recipe mcp-host pods fix(workflow-recipes): wait for the snippet runner before dispatching snippet steps
Blind review (round 1): 4 lanes on Opus 5.5Reviewed head Verdict: not ready to merge. One High finding, introduced by this PR, blocks every deploy after the first one. HighB2-01: the drift check reads a
MediumB1-01: the drift stop has no recovery path (
B4-01: five of the seven new call sites are untested.
Low
Pre-existing (not introduced here)
Verified clean
Limitations: no cluster or Playwright run. No lane read the evenfire-infra overlay pipeline beyond the deploy workflows. |
/review-pr: 2 lanes on Opus 5.5 (regression and architecture; runtime/E2E and CI)Head Architecture
MediumRP-B-01: the E2E journey cannot pass even with a correct fix (static, not run)
RP-A-01: the drift stop has no migration tool or doc. Same as B1-01.
RP-A-03 (pre-existing, scope gap): two more resources are overwritten on every dev and prod deploy
Low
Verified
Limitations:
|
opencode swarm lane: DeepSeek V4.1 Flash (max), verified by Opus 5.5One opencode 2.2.2 worker (
Result: none of this lane's findings is above Low, and the worker did not catch the High blocker B2-01 from the blind review. One remark points near it: the create path assumes Confirmed, Low
Over-defensive, no change needed
Informational, pre-existing
|
zai swarm lane: GLM-5.3 (max), verified by Opus 5.5One GLM-5.3 worker reviewed head
Result:
Confirmed, Low
Pre-existing
Over-defensive, no change needed
|
|
Took a deep pass through this one at 🔴 Not ready to approve
This is my read from the review, not a formal GH approval. Must resolve before approval
Optional (non-blocking)These can land as follow-ups or at your discretion; none of them blocks the merge.
What checked out clean
|
Problem
Provisioning reapplies the bootstrap Context manifest with an empty
mcpServerslist, removing connectors configured in Control UI and causing Context network policies to be removed and later recreated.Change
Treat Context manifests as bootstrap configuration: create a missing Context once and preserve an existing Context without writing it. Continue applying other instance resources. If other declarative Context fields differ from the previous applied manifest, stop and require an explicit migration. When there is no last-applied annotation, preserve controller-owned metadata not declared by the bootstrap manifest.
For isolated local validation, allow the E2E environment to opt out of loading the canonical developer
.env. The prerequisite check then requires an explicitly supplied local test credential. The default credential-resolution behavior is unchanged.The Context protection covers the GFS provisioning path used by the dev deployment. Other direct instance-apply paths and recovery after cluster deletion are outside this change. The dev deployment must consume a base SHA containing this fix before it protects
clerum-dev; replaying an earlier base SHA would use the old helper.Validation
origin/devprovisioning script, and the metadata test failed before its fix.clerum-devContext and a last-applied configuration matching the dev bootstrap manifest outsidemcpServers.Pending end-to-end acceptance
The E2E cases have not yet completed. They exercise visible connector configuration, two provisioning passes, HCC and Host deployment restarts, policy identity and specification, an MCP tool result from a Host pod, fresh-session visibility, and fixture cleanup. The negative case checks the unauthenticated agent route.
These checks do not by themselves prove uninterrupted availability during a transition, agent tool discovery or dispatch, a full cluster restart, or restoration after cluster deletion. The same journey still needs a demonstrated failing run against the original regression. The local Minikube profile has been created; no remote cluster resources were changed or deployed.
Related to #628. Deployed validation is still needed before closing the issue.