Approvals joins the console: admin surface, sixth module panel, metrics - #200
Open
omercelikdev wants to merge 1 commit into
Open
Approvals joins the console: admin surface, sixth module panel, metrics#200omercelikdev wants to merge 1 commit into
omercelikdev wants to merge 1 commit into
Conversation
T21 console federation for the approvals engine, the same vertical every other module walks: - GoldpathApprovalsAdminService over the STORE seam (both stores serve it): recent list with R3 repeatable OR-filters, AdminPaging clamp, detail with trail + signatures and honest quorum numbers (pending-rung scoped). - GoldpathApprovalsAdminEndpoints under AdminSurfaceGuard: GET list/detail, approve/reject through the ENGINE under the caller's principal, answering the frozen verb envelope (Ok carries Applied, a refusal carries the rule's name — never a silent 200). - GetRecentAsync on the store seam; the EF implementation orders server-side (SQLite consumers apply the family DateTimeOffsetToBinaryConverter convention, same as Bulk/Archival). - GoldpathApprovalsMetrics: six counters on the engine's state changes, with the Grafana dashboard JSON under ops/. - Console: approvals is the sixth module — worklist with quorum column, detail sheet with numbered trail + decide form, triage rows and the Awaiting-decision Today card. Suite 225/225, coverage 98.35% lines. - Tests: endpoint host tests over TestServer (routes, R3, envelope, refusal messages), admin-service quorum/orphan facts, EF recency fact. 84/84; mutation score 74.35% (gate 70). - Docs: admin contract §approvals route table, runbook + README sections, T21 ledger addendum (only the adopter proof remains open). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
What
T21 console federation for the approvals engine — the same vertical every other module walks (admin surface → console panel → triage → metrics → docs).
Admin surface (
/goldpath/admin/approvals, contract §7.1 / R3)GoldpathApprovalsAdminServiceover the store seam, so both shipped stores serve it: recent list with repeatable OR-filters (status,ladder— AND across),AdminPagingclamp, detail with trail + signatures, quorum numbers scoped honestly to the PENDING rung.GoldpathApprovalsAdminEndpointsunderAdminSurfaceGuard(exposeUnsecuredis a visible opt-out). Decisions run the engine under the caller's principal — every rule (four-eyes, distinct-eyes, reason-required) holds on the admin path too. Frozen verb envelope:OkcarriesApplied, a refusal carries the rule's name (ReasonRequired,NotFound, …) — never a silent 200.GetRecentAsyncadded to the store seam; EF orders server-side withTake(the table grows unboundedly). SQLite consumers apply the familyDateTimeOffsetToBinaryConverterconvention, same as Bulk/Archival — the endpoint host test caught the raw-column ORDER BY refusal live.Console (sixth module)
ApprovalsPanel: worklist (subject, ladder, amount, pending role, quorum n/m, requester, state), status facet defaulting to Pending, detail sheet with numbered trail + signatures + decide form printing the envelope message verbatim.Metrics + ops
Goldpath.Approvalsmeter: six counters (requested/granted/rejected/escalated/expired/withdrawn) tagged by ladder, on the engine's state changes.ops/, runbook + README sections.Docs / ledger
?tenant=).Gates
dotnet formatclean, docs-freshness green🤖 Generated with Claude Code