Repository navigation
Preserve Crossplane pause context in agent summaries - #2333
Conversation
cf58f53 to
5349768
Compare
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
PR Summary by QodoPreserve Crossplane pause context in agent summaries
AI Description
Diagram
High-Level Assessment
Files changed (19)
|
Code Review by Qodo
1.
|
d351c45 to
e3455b9
Compare
e3455b9 to
61bced5
Compare
Kubernetes can accept edits or a deletion request while a Crossplane resource's controller defers reconciliation. The generic confirmations do not explain that distinction, making a deletion that remains Terminating easy to mistake for a failed request and encouraging force deletion that can bypass cleanup. This adds context inside the relevant operation: - Single and bulk delete confirmations identify selected paused resources holding known Crossplane finalizers. Force confirmation explains the cleanup it can bypass; annotation alone, or an object without finalizers, does not get a definite deletion-blocking claim. - YAML review states whether the server preview keeps or clears the pause request and covers every submitted document, including unselected ones. Baselines remain paired with their own server document. Direct saves explain that omitting an annotation from server-side apply YAML does not guarantee removal; unavailable previews label unverified state. Strict Create does not imply unknown existing state. - Acknowledged resources without spec references use the shared pause-evidence helper. Single-target editing retains raw condition evidence when normalized review YAML strips status. Baselines and raw evidence bind to the effective targetâs group, Kind, namespace and name, so another API group cannot borrow the original objectâs pause. Generic Apply does not infer controller identity from an annotation alone. Diagnose confirmation uses the existing caller-readable target query. Removing the annotation requests resumption and may allow pending work, including deletion; it does not confirm controller activity or imply that related controllers paused. Existing permission checks and write callbacks remain authoritative. Validation: the full `make build` pipeline (frontend, embed, Go), 46 focused notice/review/editor tests, type-check and all current-head CI passed on the reviewed feature at `8704cb693`. After rebasing on current main/UI, all feature additions and removals are unchanged. Mainâs cascade and phone controls are preserved; 45 focused deletion/notice/review tests and the type-check passed, followed by all required CI on `5762d6986`. Current head `52da1e50c` is rebased onto main including #2333; its only later product adjustment removes the old âstuckâ reporting sentence. All 35 focused notice/dialog tests and `make tsc` passed for that adjustment; all required CI now passes on this head, including the full application build and Settings browser journeys. Source integration against #2041 head `63a51deea` preserves both pause notices and its new outcome/selection guards. The sole merge conflict is the inherited #2333/#2041 MCP catalog budget test; #2041 needs rebase and combined catalog measurement. This is source evidence, not a combined live-test claim. These include different-group direct/unavailable review, same-target served-version clearing, unchanged direct submission, and the initial editor debounce. Actual EKS API/UI checks validated persisted edits, server prediction differences and accepted deletion retaining its finalizer despite 409. The integrated instance rechecked raw ref-less acknowledgement through status-free review, normal/force context and mixed selection without another write; desktop screenshots at light 1280Ã800 and dark 1920Ã1080 passed inspection. All owned inert fixtures and the app process were cleaned up. The final combined source/approach review covered the unchanged feature patches before the rebase and their parent/context interactions: no blocker, with four Low observations retained under evidence-backed scoped dispositions. Qodoâs initial debounce finding was fixed; its acceptance inference was rejected using conditional-copy and Apply-gate evidence. The recurring local editor timing flake remains documented; the exact final 11-test rerun and CI passed with unchanged limits. Synthetic fixtures cannot establish natural Crossplane cloud reconciliation. This builds on the ownership/deletion-impact preview already merged in #2050. #2041 separately reports accepted deletion waiting on finalizers as progress and changes confirmation closure/outcome handling. The Crossplane notice is pre-confirmation context and does not depend on either the old error response or the new accepted-result response. No DELETE result parsing, propagation, MCP deletion eligibility or confirmation-token behavior changes here.
Crossplane operators can intentionally stop reconciliation while a resource still has recorded readiness or a separate reconcile error. Agent summaries can lose that intent, so a list, search result or Diagnose kickoff describes a paused object as simply Ready and omits why changes are not taking effect.
This adds optional
crossplanePausecontext to existing resource summaries, list/search enrichment, resource detail context and the Diagnose kickoff.requestedrecords the exactcrossplane.io/paused: "true"annotation;acknowledgedalso records the corroboratingSynced=False/ReconcilePausedcondition. This is annotation intent: exact known built-in group/kind identities (including dynamically read APIService and CustomResourceDefinition) are excluded even when typed resources are converted for generic reads, while foreign CRDs with colliding kinds remain eligible. Acknowledgement makes no freshness, generation, pause-start or child-controller claim. Omission does not rule out another pause mechanism.On generic CRD rows carrying pause intent, recorded Ready and independent Synced errors remain separate, including rows with an ancestor-derived status. Curated extractors preserve their own readiness ratios and diagnostics if an annotation is copied onto them. Bare summaries retain the pause fact with
context=none; Compact retains the exact annotation and raw conditions. The common Summary entry also gives every terminating CRD its deletion/finalizer context and brings the runtime-object CRD path into parity with direct unstructured calls, including existing curated extractors.The canonical identity table also gains APIService and CustomResourceDefinition, which Radar already reads dynamically. Existing consumers now apply their native group and cluster scope to identity inference, GitOps membership and permission lookups. Opt-in usage statistics recognize those two native resource-view names; custom names and contents remain excluded. Static typed-routing gates are unchanged.
The Diagnose kickoff describes availability as recorded and keeps pause independent from issues and audit findings. No endpoint, MCP tool eligibility, UI, action or issue-suppression changes; existing authorization rules remain in place. Older producers may omit the additive field. Machine-facing descriptions explain requested versus stored acknowledgement and the limits of absence; the machine catalog grows by 531 bytes to 63,761 against a deliberate 63,800-byte limit, preserving existing routing and coverage guidance.
Validation:
make tscand the complete frontend/embed/Gomake buildpipeline passed, including the final reviewed six-PR integration. Final focused MCP read-contract/catalog/routing checks passed (83.216s), and the native/foreign Argo membership regression passed (1.021s). Catalog: 63,761 bytes within the explicit 63,800-byte allowance. Head 61bced5 integrates mainâs manager context alongside the reviewed pause context. All five affected shared-package suites and focused MCP read/catalog/routing checks passed after rebase; the catalog is 63,761 bytes against 63,800. Fresh CI is running. Four commits remain patch-identical; the first commitâs two conflicts retain both features.Final combined full-source review covered this exact feature in the six-PR integration and found no blocker. All four low-severity findings were triaged with source evidence; canonical identity coupling and per-tool wording remain deliberate tradeoffs. Malformed duplicate Synced conditions can differ between Go first-match and UI any-match; valid Crossplane conditions are unique by type, and shared vectors remain a maintenance follow-up. The reviewed integration build passed. Fresh CI for the main integration is pending; the feature remains approved as scoped.