Make organization settings navigable, self-saving, and plainly explained - #496
Merged
Conversation
Repository names on the dashboard and in installation health link to the repository on GitHub, and live config artifacts link to the file they describe on its source repository. The settings page closes with a documentation link and the support address so an admin stuck on rollout has a next step in context.
The settings page saved only through one button below every section, so a toggled merge gate silently reverted when the page was left before scrolling to it. The merge gate and shared-configuration toggles now save on change with inline confirmation, the fallback texts save automatically after a pause, and inference settings keep an explicit save inside their own section because they carry credentials. The organization .postil.yaml fallback gains structured controls for the common options (gate severity, outage behavior, content policy, severity and confidence thresholds, finding cap, ignored paths). The YAML text stays the single source of truth: controls rewrite it through the document API, so comments and uncovered keys survive, and the text field remains the escape hatch. Installation health stops presenting expected states as problems: a repository that does not enforce the gate warns only when the merge gate is on, advisory mode is named in the section summary, and the per-repository detail lines and consequences drop App-binding jargon in favor of plain statements of what GitHub does and does not tell Postil, with the ruleset migration path explained where verification is impossible.
Structured edits pass a scalar or unparseable document through unchanged instead of throwing on stringify or replacing the text, and the controls step aside for any document that is not a mapping.
The change detection that decides whether to record an audit event reads the current value in the same transaction; locking the row keeps concurrent toggles from misrecording events.
Overlapping saves from rapid toggling could report or revert out of order; a sequence guard drops superseded responses. The shared configuration toggle also revalidates the dashboard, matching the gate toggle.
An older in-flight save could land after a newer one and persist stale text; saves now run in order and only the latest sends or reports.
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.
An admin toggled the merge gate, refreshed, and lost the change: the only save button sat below every section, far off screen. The same session showed the page assumes too much. Repository names and config artifacts were dead text, "not enforced" wore a warning icon even in deliberate advisory mode, and "App binding is not readable" explained nothing to someone who has not read the enforcement checker.
Low-risk controls now save on change: the merge gate and shared-configuration toggles save immediately with inline confirmation and an audit event, and the fallback texts save automatically after a pause, with YAML validation errors surfaced in place. Inference settings keep an explicit save inside their own section because they carry credentials. The organization
.postil.yamlfallback gains structured controls for the common options (gate severity, outage behavior, content policy, thresholds, finding cap, ignored paths); the YAML text stays the single source of truth, so comments and uncovered keys survive round trips and the text field remains the escape hatch.Installation health stops presenting expected states as problems. A repository that does not enforce the gate warns only when the merge gate is on, advisory mode is named in the summary, and the per-repository lines say plainly what GitHub does and does not tell Postil, including why classic branch protection cannot be verified and that a branch ruleset naming the Postil App can. Repository names and live config artifacts link to GitHub, and the page points to the documentation and
hello@postil.devfor help.