Skip to content

docs(mint): add the App permission rollout runbook and the contributor rule - #6955

Open
waynesun09 wants to merge 3 commits into
mainfrom
docs-app-permission-rollout
Open

docs(mint): add the App permission rollout runbook and the contributor rule#6955
waynesun09 wants to merge 3 commits into
mainfrom
docs-app-permission-rollout

Conversation

@waynesun09

Copy link
Copy Markdown
Member

Summary

Write down the standard procedure for rolling out a new GitHub App permission to a mint role, as exercised end to end for packages:read in v0.40.0.

  • New guide docs/guides/infrastructure/app-permission-rollout.md — walkthrough form: roles at a glance (contributor · App owner · mint admin · installation owner · CLI user), the five rules that explain the fixed order (code → App registration → mint deploy → CLI release → outreach), one step-by-step section per persona with exact GitHub UI paths, commands, and the three mint log lines to watch, a state → log → token → github setup output table, how to finish the rollout (remove the optional entry), and troubleshooting for the failure modes met in practice.
  • Contributor rule in docs/contributing/mintcore.md — "Adding a permission to a role": the three declaration sites that change together (canonicalRolePermissions, the GCF embed, AgentAppConfig), the parity tests, the backward-compatibility requirement that a permission existing installations have not granted goes into optionalRolePermissions in the same PR, that the entry is temporary, and the !/BREAKING CHANGE commit convention.
  • infrastructure-reference.md — the rollout section is reduced to a mechanism paragraph plus a link; operator steps and test-pool specifics no longer live on the reference page.
  • Sidebar entry under Infrastructure; short pointers from mint-administration.md (add-role area) and operations.md (a new "Accepting a GitHub App permission update" note for org admins).

Why

The rollout mechanism landed in #6654 but the operator procedure was folded into the reference page and mixed with test-infrastructure details. Operators need a page they can follow without having been in the room; contributors need the rule that keeps the next permission change backward compatible.

Verification

  • pre-commit on all changed files: docs link scope, markdown links, whitespace, prettier — all pass.
  • npx vitepress build docs — build complete; the operations.md anchor link into the runbook resolves in the built HTML.
  • No project IDs, hostnames, installation IDs, tenant or test-pool org names in the new content; placeholders (<org>, <app-slug>, <project>, <mint-url>) throughout.

Refs #6649, #6945.

…r rule

Adding a permission to a mint role is an operational rollout, not a
deploy: GitHub rejects the whole installation-token request when any
requested permission is ungranted, and existing installations grant
nothing until an org owner Accepts the App update. The v0.40.0
packages:read rollout exercised the full flow — contributor, App owner,
mint admin, installation owners, CLI users — so write it down as the
standard procedure.

- New guide docs/guides/infrastructure/app-permission-rollout.md: roles
  at a glance, the five rules that explain the ordering, one step-by-step
  section per persona with exact UI paths, commands and the log lines to
  watch, a state -> log -> token -> setup-output table, how to finish the
  rollout, and troubleshooting for the failure modes seen in practice.
- docs/contributing/mintcore.md: "Adding a permission to a role" — the
  declaration sites that change together, the parity tests, the
  backward-compatibility rule (new permissions go in
  optionalRolePermissions for the rollout window), and the BREAKING
  CHANGE commit convention.
- infrastructure-reference.md: the rollout section becomes a short
  mechanism paragraph plus a link; operator steps and test-pool specifics
  move out of the reference page.
- Sidebar entry, and pointers from mint-administration and operations.

Refs #6649, #6945.

Assisted-by: Claude
Signed-off-by: Wayne Sun <gsun@redhat.com>
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Document GitHub App permission rollout and contributor safeguards

📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Add an end-to-end runbook for safely rolling out GitHub App permissions.
• Define contributor parity, compatibility, and temporary optional-permission requirements.
• Link operator, administration, reference, and sidebar documentation to the new guide.
Diagram

graph TD
  C["Contributor PR"] --> A["App Registration"] --> M["Mint Deploy"] --> L["CLI Release"] --> O["Owner Outreach"] --> F["Finalize Rollout"]
Loading
High-Level Assessment

The chosen structure is appropriate: keep the concise mechanism in the infrastructure reference, place actionable operator steps in a dedicated runbook, and keep contributor invariants near mintcore development guidance. Retaining everything on the reference page was considered but would continue mixing architecture, deployment procedure, and environment-specific operations.

Files changed (6) +368 / -65

Documentation (4) +344 / -0
mintcore.mdDefine contributor requirements for permission changes +50/-0

Define contributor requirements for permission changes

• Documents the three permission declaration sites, required parity tests, and breaking-change convention. Establishes the backward-compatibility rule that newly requested permissions remain temporarily optional until installations accept them.

docs/contributing/mintcore.md

operations.mdExplain how organization owners accept permission updates +6/-0

Explain how organization owners accept permission updates

• Adds the GitHub UI path and ownership requirements for accepting pending App permissions. Clarifies that optional permissions are omitted while approval is pending and links to the installation-owner runbook step.

docs/guides/getting-started/operations.md

app-permission-rollout.mdAdd the end-to-end App permission rollout runbook +286/-0

Add the end-to-end App permission rollout runbook

• Introduces the complete contributor-to-installation rollout workflow, including sequencing rules, commands, expected logs, runtime states, rollout completion, and troubleshooting. Uses the packages read permission as a worked example while retaining reusable placeholders.

docs/guides/infrastructure/app-permission-rollout.md

mint-administration.mdLink role permission changes to the rollout procedure +2/-0

Link role permission changes to the rollout procedure

• Distinguishes changing an existing role's permissions from adding a role and directs mint administrators to the new rollout runbook.

docs/guides/infrastructure/mint-administration.md

Other (2) +24 / -65
config.tsAdd the rollout runbook to infrastructure navigation +4/-0

Add the rollout runbook to infrastructure navigation

• Adds an Infrastructure sidebar entry for the new App Permission Rollout guide, making the operational procedure directly discoverable.

docs/.vitepress/config.ts

infrastructure-reference.mdReplace embedded rollout instructions with mechanism summary +20/-65

Replace embedded rollout instructions with mechanism summary

• Condenses the rollout section to the optional-versus-required permission mechanism and CLI behavior. Moves procedural and test-environment details into the dedicated runbook and links readers there.

docs/guides/infrastructure/infrastructure-reference.md

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 3, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 11:15 AM UTC · Ended 11:23 AM UTC

Commit: e7641f3 · View workflow run →

@qodo-code-review

qodo-code-review Bot commented Sep 3, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (1) 📜 Skill insights (3)

Grey Divider


Action required

1. Guide omits README index entry ✓ Resolved 📜 Skill insight ⚙ Maintainability
Description
The PR adds docs/guides/infrastructure/app-permission-rollout.md but does not modify
docs/guides/README.md to include it. The guide is therefore absent from the documented guide
index.
Code

docs/guides/infrastructure/app-permission-rollout.md[R1-3]

+# Rolling out a GitHub App permission
+
+Adding a permission to an agent role is not a code change you can just deploy. The mint asks GitHub
Relevance

●●● Strong

Accepted precedent requires new guides to be added to the guides index for discoverability.

PR-#5778

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The diff shows a newly added guide file, while no docs/guides/README.md modification is present in
the supplied PR diff.

docs/guides/infrastructure/app-permission-rollout.md[1-3]
Skill: writing-user-docs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new infrastructure guide is not added to the `docs/guides/README.md` index.

## Issue Context
Add a discoverable entry using the repository's existing guide-index structure.

## Fix Focus Areas
- docs/guides/infrastructure/app-permission-rollout.md[1-3]
- docs/guides/README.md[1-200]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Runbook lacks prerequisites 📜 Skill insight ✧ Quality
Description
The new guide begins with background and rollout rules but has no clearly labeled Prerequisites
section before its procedural steps. Readers therefore lack a stated list of required access, tools,
and permissions before starting the procedure.
Code

docs/guides/infrastructure/app-permission-rollout.md[R69-73]

+## Step by step
+
+The subsections below are in rollout order. Each one is a different person's job.
+
+### Contributor: land the change
Relevance

●●● Strong

Accepted documentation precedent explicitly requires a Prerequisites section before procedural
steps.

PR-#6455

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The document proceeds from explanatory sections directly to ## Step by step and the first persona
procedure without a Prerequisites heading.

docs/guides/infrastructure/app-permission-rollout.md[69-73]
Skill: writing-user-docs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The guide has procedural sections but no clearly labeled prerequisites section before the first procedure.

## Issue Context
Document the required GitHub, mint, GCP, CLI, and organization-owner access before the step-by-step content.

## Fix Focus Areas
- docs/guides/infrastructure/app-permission-rollout.md[1-19]
- docs/guides/infrastructure/app-permission-rollout.md[69-73]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Runbook mixes multiple audiences 📜 Skill insight ⌂ Architecture
Description
The new guide explicitly assigns procedures to five personas—Contributor, App owner, Mint admin,
Installation owner, and CLI user—rather than targeting a single audience. This violates the
requirement that each guide address only one audience.
Code

docs/guides/infrastructure/app-permission-rollout.md[R21-29]

+Five roles are involved, usually five different people:
+
+| Role | What they do |
+|------|--------------|
+| **Contributor** | Lands one PR that adds the permission to the mint's role map, the embedded copy of the mint, and the App manifest, and marks it optional for the duration of the rollout. |
+| **App owner** | Adds the permission on the GitHub App registration, which puts a pending update in front of every installation. |
+| **Mint admin** | Deploys the mint that understands the new map, confirms the deploy landed, and watches the logs for installations that have not accepted. |
+| **Installation owner** | An **owner** of an organization the App is installed on. Accepts the pending update for that organization. |
+| **CLI user / repo admin** | Upgrades the fullsend CLI and re-runs `fullsend github setup <owner/repo>` for their repository. |
Relevance

●● Moderate

The multi-persona structure is intentional, but the single-audience requirement may still govern
guide taxonomy.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The guide's roles-at-a-glance table explicitly identifies five different personas and the document
contains a separate procedure for each.

docs/guides/infrastructure/app-permission-rollout.md[21-29]
Skill: writing-user-docs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new guide combines procedures for contributors, App owners, mint administrators, installation owners, and CLI users, violating the single-audience guide requirement.

## Issue Context
Keep each guide focused on one audience and place cross-audience procedures in separate guides or link to audience-specific documents.

## Fix Focus Areas
- docs/guides/infrastructure/app-permission-rollout.md[21-29]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

4. Hardcoded hosted App identifiers 📘 Rule violation ⛨ Security
Description
The new runbook embeds the organization-specific hosted App slug fullsend-ai-coder and references
the fullsend-ai organization as operational examples. These environment-specific identifiers
should be represented with placeholders or loaded from configuration rather than hardcoded in
documentation.
Code

docs/guides/infrastructure/app-permission-rollout.md[R86-89]

+### App owner: update the App registration
+
+Do this once per App set you own. For the hosted apps the coder App slug is `fullsend-ai-coder`; for
+your own app set it is `<app-set>-coder`.
Relevance

●●● Strong

The concrete hosted App slug conflicts with the stated placeholder-only documentation requirement.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The runbook states that hosted apps use the concrete slug fullsend-ai-coder instead of using the
placeholders used elsewhere in the same document; the checklist prohibits hardcoded
environment-specific identifiers in changed content.

Rule 1062040: Disallow hardcoded secrets and sensitive environment-specific identifiers in source code
docs/guides/infrastructure/app-permission-rollout.md[86-89]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The runbook hardcodes the hosted App slug `fullsend-ai-coder`, an organization-specific deployment identifier.

## Issue Context
Use placeholders such as `<app-slug>` and `<owner-org>` throughout the generic runbook, or clearly label the value as a non-sensitive illustrative example if it is intentionally public.

## Fix Focus Areas
- docs/guides/infrastructure/app-permission-rollout.md[86-89]
- docs/guides/infrastructure/infrastructure-reference.md[143-146]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. Runbook inlines architecture details 📜 Skill insight ⚙ Maintainability
Description
The guide contains an extensive inline explanation of mint token negotiation, GitHub installation
permission state, optional downscoping, and rollout ordering instead of linking architectural
context to a normative reference. This duplicates architectural behavior in a procedural guide and
can become stale.
Code

docs/guides/infrastructure/app-permission-rollout.md[R34-46]

+## The rules
+
+These five facts explain every step below. If a step ever looks optional, come back here.
+
+1. **There is no partial downscope.** When the mint POSTs for an installation token, GitHub rejects
+   the *entire* request with `422` if any requested permission is not granted on that installation.
+   It does not quietly return a smaller token. A role map that asks for one ungranted permission
+   therefore breaks every token for that role, not just the new capability.
+2. **The installation object lists accepted permissions only.** The mint looks the installation up
+   (`GET /orgs/<org>/installation`, `GET /repos/<owner>/<repo>/installation`) and reads the
+   `permissions` map. A pending update never appears there — only what the organization has already
+   accepted. This is why the App registration can be updated before the mint is redeployed without
+   breaking anything, and why the mint can decide what to request *before* it POSTs.
Relevance

●●● Strong

Recent documentation precedent favors linking canonical architecture context to reduce duplication
and drift.

PR-#6455

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The new guide's five rules provide a detailed architectural description of installation objects,
token requests, optional permissions, and fixed rollout ordering; the reference page already
provides a mechanism paragraph and link target.

docs/guides/infrastructure/app-permission-rollout.md[34-67]
docs/guides/infrastructure/infrastructure-reference.md[127-146]
Skill: writing-user-docs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The guide restates detailed architecture and mechanism semantics inline, including token rejection behavior and installation permission state.

## Issue Context
Retain concise operational guidance, but link the architectural mechanism to the authoritative reference or architecture documentation.

## Fix Focus Areas
- docs/guides/infrastructure/app-permission-rollout.md[34-67]
- docs/guides/infrastructure/infrastructure-reference.md[125-146]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 65 rules
Review mode: 🚀 Fast: The PR is documentation-focused with a localized sidebar/config update and no runtime behavior, security, or data changes; a light review can verify links, structure, and consistency.

Grey Divider

Tip of the day
💡 Did you know, you can add REVIEW.md to your repo root and Qodo follows it on every PR

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment on lines +21 to +29
Five roles are involved, usually five different people:

| Role | What they do |
|------|--------------|
| **Contributor** | Lands one PR that adds the permission to the mint's role map, the embedded copy of the mint, and the App manifest, and marks it optional for the duration of the rollout. |
| **App owner** | Adds the permission on the GitHub App registration, which puts a pending update in front of every installation. |
| **Mint admin** | Deploys the mint that understands the new map, confirms the deploy landed, and watches the logs for installations that have not accepted. |
| **Installation owner** | An **owner** of an organization the App is installed on. Accepts the pending update for that organization. |
| **CLI user / repo admin** | Upgrades the fullsend CLI and re-runs `fullsend github setup <owner/repo>` for their repository. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Runbook mixes multiple audiences 📜 Skill insight ⌂ Architecture

The new guide explicitly assigns procedures to five personas—Contributor, App owner, Mint admin,
Installation owner, and CLI user—rather than targeting a single audience. This violates the
requirement that each guide address only one audience.
Agent Prompt
## Issue description
The new guide combines procedures for contributors, App owners, mint administrators, installation owners, and CLI users, violating the single-audience guide requirement.

## Issue Context
Keep each guide focused on one audience and place cross-audience procedures in separate guides or link to audience-specific documents.

## Fix Focus Areas
- docs/guides/infrastructure/app-permission-rollout.md[21-29]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +69 to +73
## Step by step

The subsections below are in rollout order. Each one is a different person's job.

### Contributor: land the change

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Runbook lacks prerequisites 📜 Skill insight ✧ Quality

The new guide begins with background and rollout rules but has no clearly labeled Prerequisites
section before its procedural steps. Readers therefore lack a stated list of required access, tools,
and permissions before starting the procedure.
Agent Prompt
## Issue description
The guide has procedural sections but no clearly labeled prerequisites section before the first procedure.

## Issue Context
Document the required GitHub, mint, GCP, CLI, and organization-owner access before the step-by-step content.

## Fix Focus Areas
- docs/guides/infrastructure/app-permission-rollout.md[1-19]
- docs/guides/infrastructure/app-permission-rollout.md[69-73]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread docs/guides/infrastructure/app-permission-rollout.md
Comment on lines +34 to +46
## The rules

These five facts explain every step below. If a step ever looks optional, come back here.

1. **There is no partial downscope.** When the mint POSTs for an installation token, GitHub rejects
the *entire* request with `422` if any requested permission is not granted on that installation.
It does not quietly return a smaller token. A role map that asks for one ungranted permission
therefore breaks every token for that role, not just the new capability.
2. **The installation object lists accepted permissions only.** The mint looks the installation up
(`GET /orgs/<org>/installation`, `GET /repos/<owner>/<repo>/installation`) and reads the
`permissions` map. A pending update never appears there — only what the organization has already
accepted. This is why the App registration can be updated before the mint is redeployed without
breaking anything, and why the mint can decide what to request *before* it POSTs.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

4. Runbook inlines architecture details 📜 Skill insight ⚙ Maintainability

The guide contains an extensive inline explanation of mint token negotiation, GitHub installation
permission state, optional downscoping, and rollout ordering instead of linking architectural
context to a normative reference. This duplicates architectural behavior in a procedural guide and
can become stale.
Agent Prompt
## Issue description
The guide restates detailed architecture and mechanism semantics inline, including token rejection behavior and installation permission state.

## Issue Context
Retain concise operational guidance, but link the architectural mechanism to the authoritative reference or architecture documentation.

## Fix Focus Areas
- docs/guides/infrastructure/app-permission-rollout.md[34-67]
- docs/guides/infrastructure/infrastructure-reference.md[125-146]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +86 to +89
### App owner: update the App registration

Do this once per App set you own. For the hosted apps the coder App slug is `fullsend-ai-coder`; for
your own app set it is `<app-set>-coder`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

5. Hardcoded hosted app identifiers 📘 Rule violation ⛨ Security

The new runbook embeds the organization-specific hosted App slug fullsend-ai-coder and references
the fullsend-ai organization as operational examples. These environment-specific identifiers
should be represented with placeholders or loaded from configuration rather than hardcoded in
documentation.
Agent Prompt
## Issue description
The runbook hardcodes the hosted App slug `fullsend-ai-coder`, an organization-specific deployment identifier.

## Issue Context
Use placeholders such as `<app-slug>` and `<owner-org>` throughout the generic runbook, or clearly label the value as a non-sensitive illustrative example if it is intentionally public.

## Fix Focus Areas
- docs/guides/infrastructure/app-permission-rollout.md[86-89]
- docs/guides/infrastructure/infrastructure-reference.md[143-146]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@codecov

codecov Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

Site preview

Preview: https://470cd226-site.fullsend-ai.workers.dev

Commit: dfdf5f2659b5508c25955aa0d69e1227f54a106e

…unbook

Review follow-ups on the rollout runbook: show the HTTP 422 body
(`{"error": …}`, message only) separately from the mint log line that
carries the `failed to mint token: org=…` prefix; scope the
"nobody blocks anybody" claim to acceptance and CLI upgrade, since the
first three steps are ordered; make the CLI step explicitly optional for
the permission itself; note that an empty permissions map is treated like
a missing one; mention the Organization permissions section, personal
account installations, Cloudflare Worker logs, and the --openai-* flags;
promote the operations note to its own section; add the guide to the
guides index.

Assisted-by: Claude
Signed-off-by: Wayne Sun <gsun@redhat.com>
State the access and tooling each persona needs before their step, and
tell readers to jump to their own section.

Assisted-by: Claude
Signed-off-by: Wayne Sun <gsun@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Sep 3, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 11:24 AM UTC · Ended 11:25 AM UTC

Commit: 9e5f113 · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 3, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 11:27 AM UTC · Completed 11:45 AM UTC

Commit: dfdf5f2 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $8.55

@fullsend-ai-review

Copy link
Copy Markdown

Risk Assessment: moderate (2/5)

Details

Docs-only PR adding a rollout runbook and contributor rule (467 lines, 7 files) with no protected paths, security-sensitive content, CI, or dependency changes; moderate score reflects the non-trivial size and active churn in the surrounding docs area, offset by the inherently low-risk nature of additive documentation.

@fullsend-ai-review

Copy link
Copy Markdown

Review

Findings

Low

  • [spurious blank line] docs/guides/getting-started/operations.md:29 — The diff adds a stray blank line between the GitHub table and the ### GitLab heading (two blank lines instead of one). The rest of the file uses exactly one blank line between a table and a heading.
    Remediation: Remove the extra blank line so there is a single blank line between the table and ### GitLab, matching the rest of the file.

Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the review comment for full details.

| `FULLSEND_GCP_PROJECT_ID` | Repo secret | GCP project ID where Agent Platform is enabled | `my-gcp-project` |
| `FULLSEND_GCP_WIF_PROVIDER` | Repo secret | Full WIF provider resource name for OIDC authentication | `projects/123456789/locations/global/...` |


Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] spurious blank line

The diff adds a stray blank line between the GitHub table and the ### GitLab heading (two blank lines instead of one). The rest of the file uses exactly one blank line between a table and a heading.

Suggested fix: Remove the extra blank line so there is a single blank line between the table and ### GitLab, matching the rest of the file.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk/moderate PR risk: moderate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant