You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
Five new deployment statuses, surfaced end-to-end. Beyond in-progress / success / failure, the dashboard now distinguishes pending, queued, waiting, cancelled, and rejected (an 8-value status enum). The three effective statuses (success / in-progress / failure) still drive the matrix tile and swimlane card colour; the five new statuses surface as a distinct "next" badge for a deployment beyond the live one, and all eight appear in deployment history and the inspector. The contract gains MatrixSlot.next (the latest non-effective deployment, when newer than the current effective one) and MatrixSlot.prev_failed.
Cancelled and not-approved deployments are distinguished from plain failures. The fetcher derives cancelled from the associated workflow-run conclusion and rejected from pending-deployment reviews — signals that live beyond GitHub's deployment_status pipeline, which has no cancelled/rejected state of its own.
"Never deployed" neutral state. A slot whose only/latest deployment is non-effective with no effective baseline now renders a neutral tile and status chip instead of a spinner or a failure.
Universal correlation id across the control plane. Every control command now carries a correlation_id that ties a user-initiated action to all of its downstream events. For a reset it is born on reset-initiated and flows through reset-started, reset-completed, every component reset-ack, and the post-reset status events; the component-event stream and the demo driver's event feed surface it as a chip, and clicking a chip filters the feed to a single correlated process. Component events accept an optional X-Correlation-Id header (≤128 chars) that is persisted and echoed on the SSE frame.
Changed
Breaking — reset_id retired in favour of correlation_id. The control contract no longer exposes reset_id: the POST /api/control/reset202 body returns correlation_id, the control-stream frames carry correlation_id, and the reset ack-gate now matches on the X-Correlation-Id request header instead of a payload.reset_id body field. The component_events, control_stream_events, and reset_cycle tables rename their reset_id column to correlation_id (handled by an EF migration). The demo's "reset on ingest/seed" checkboxes are removed — ingest never triggers a reset; use the dedicated Reset System control.
Fixed
Demo rate-limit count no longer inflates on unchanged polls. The github-emulator now honours If-None-Match (returning 304 with a content ETag) and exempts GET /rate_limit, so repeated fetcher polls of unchanged data no longer grow the dashboard's reported request count.
Security
.gitignore now ignores all **/.env.* files (while keeping .env.example), so environment files containing secrets cannot be committed accidentally.