Repository navigation
feat(executive): executive view on the redesign layout (#903) - #928
Merged
Merged
Conversation
The redesigned executive view offers "Reporter" next to "Approuver" on each decision the committee owes. The approval engine only knows approve and reject, and the owner chose a dated note rather than a new engine state: POST /governance/approvals/:id/defer appends who deferred, when and why to a new deferrals list (migration 0071) and writes a 'defer' audit event. The request stays pending at the same step; quorum, four-eyes and delegations read the decisions only and do not see it. Only someone eligible to sign the open step may defer, so a deferral is never a way round the maker-checker rule. Tests cover success (circuit untouched, approval still works after), not found, the maker, an ineligible role and another tenant. Signed-off-by: alex-dembele <alexandredembele16@gmail.com>
The executive view says how each headline moved since last quarter
("+4 pts depuis le T3"), and only the score had a past. The daily
snapshot now also keeps the annualised exposure, the live critical risks
and the average compliance coverage (migration 0072), each read on its
own so one failing source leaves only its figure empty. /score/history
returns quarter_baseline: the last snapshot before the current quarter
began, or null when none exists, so no delta is ever invented.
The financial summary's top risks also carry ale_after, the exposure
targeted once mitigations are in place, which the view draws next to the
inherent ALE.
Signed-off-by: alex-dembele <alexandredembele16@gmail.com>
UpdateRequest writes a fixed set of columns and deferrals was not among them. POST /governance/approvals/:id/defer answered 200 and the audit trail recorded one deferral, but the row kept an empty list, so the executive view never showed "Reportée le …" after a reload. The use-case tests ran on a fake repository and could not see it; a repository test now saves a deferral and reads it back. Signed-off-by: alex-dembele <alexandredembele16@gmail.com>
…ign (#903) The page a risk committee reads, laid out as the mockup: eyebrow with the committee and quarter, Copier le lien and Exporter le rapport (board report, then the reports page), four headline figures with their movement since last quarter, the five largest exposures with inherent and targeted residual bars, compliance by framework, and the decisions the committee owes. Deltas compare today with the last daily snapshot before the quarter began; with none, the tile says there is no reading yet instead of inventing a movement. Decisions are the tenant's pending approvals. Approuver signs the open step, Reporter adds a dated note and moves the request to the bottom. Both are optimistic and roll back on refusal, and neither retries: a refused signature is final, and the app-wide mutation retry sent it four times. A request's own summary is its sub-line when the requester wrote one. Every block has its skeleton, error with retry and empty state. The old analytics service this page used is removed; nothing else imported it. Signed-off-by: alex-dembele <alexandredembele16@gmail.com>
This was referenced Oct 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fourth screen of the redesign epic (#899). Stacked on #927 (action center): the base is
feat/902-action-center, so the diff shows only this issue.What changes for the user
The executive view is now the one-page committee summary from the mockup: "Comité des risques · T4 2026", Copier le lien and Exporter le rapport, four headline figures with their movement since last quarter, the five largest exposures (inherent and targeted residual bars), compliance by framework with the counting footnote, and the decisions the committee owes, each with Reporter and Approuver.
Backend
POST /governance/approvals/:id/defer(migration 0071): a dated "deferred to the next committee" note; the request stays pending at the same step. Only someone eligible to sign the open step may defer, so it is never a way round maker-checker. Audit eventdefer./score/historyreturnsquarter_baseline, the last snapshot before the current quarter, or null.ale_after.UpdateRequestwrote a fixed column list withoutdeferrals. The API answered 200, the audit said one deferral, the row stayed empty. Repository test added.Frontend
features/analytics/ExecutiveDashboard.tsxrewritten; the oldexecutiveService/useExecutiveare removed (nothing else imported them).retry: 3) sent a refused signature four times.Verified
go test ./...: all packages pass, including the newTestUpdateRequest_PersistsDeferrals(failed before the fix).npx tsc -b --noEmitclean, eslint clean on the touched files,npx vitest run112 files / 1013 tests (two clean runs; one earlier run right aftergo testhad 23 timeouts across 8 unrelated files and did not reproduce).committeeDecisions.test.tsx: optimistic defer, rollback, a refused signature sent once (fails ifretry: falseis removed), approved state.Deliberate differences from the mockup
#84cb6560, notR-0142: risks have no human reference yet, and the register shows the same form.Not done here
GET /analytics/executiveremains on the backend with no frontend caller left. Removing it is a separate cleanup.Closes #903