Skip to content

Docsio v2 is out

See changelog
← Docsio Research

Documentation workflow · Research synthesis

Does docs-as-code guarantee your published docs were reviewed?

Compare GitHub and GitLab review controls, approval changes and deployment permissions. Learn what proves a docs revision was reviewed before publication.

By Docsio Research13 min read

Git history, reviewer requests and approval buttons are different from enforced review of the published revision. Official GitHub and GitLab documentation shows where those controls apply and where configuration changes their meaning. We connect those boundaries into a practical review-to-publication record and a proposed verification exercise.

Key findings

  • GitHub code-owner assignment and mandatory approval are separate. Multiple listed owners do not automatically mean every owner must approve. GitHub

  • GitLab Free approvals are optional; required rules are documented for Premium and Ultimate. GitLab

  • Post-approval changes and deployment authority need explicit policies. A recorded approval alone does not establish which content reached production.

  • Our proposed evidence record links the content candidate, review, validation and release. It is a planning method, not a tested benchmark or a guarantee of factual accuracy.

How we researched this

We inspected eight official GitHub and GitLab documentation pages on November 13, 2026, comparing review assignment, mandatory approvals, changed revisions and deployment controls. This is a targeted research synthesis of documented behavior, not a configuration audit or a vendor experiment. We did not access customer repositories, change permissions or execute deployment tests. The release record, Northstar Guides example and acceptance scenarios are our editorial proposals. Plan restrictions reflect the cited pages at access time; no pricing or adoption dataset was collected.

Does putting documentation in Git guarantee review?

No. A repository can record changes without requiring anyone to approve them, and a reviewed change can be followed by another change before publication. Our proposed test is whether the workflow enforces your review policy on the material readers actually receive.

This report uses “reviewed” to mean that the required reviewers approved the relevant content revision under a defined policy. It does not mean that every sentence is correct. An approval record and a technical fact-check answer different questions.

There is also a positive case for docs-as-code. A deliberately configured process can connect a proposed change, named reviewers, validation results and a release. The official controls below provide ways to enforce parts of that process. The mistake is treating the existence of a pull request or an owner file as evidence that every part is already enforced.

Consider an ordinary documentation update. A writer changes a setup guide, an engineer approves it, someone adjusts a command after that approval, and a hosting service deploys the branch. To assess the result, you need to know which change the engineer saw, whether the later edit needed another review and which revision reached the site. “The pull request was approved” leaves those questions open.

Our existing documentation review guide covers the editorial stages. Here we examine the controls and records that connect those stages to publication.

Separate assignment, approval, validation and publication

A practical review policy should name four decisions. These are our proposed categories for evaluating a workflow, not a vendor certification model.

DecisionQuestion to answerEvidence to retainWhat it does not establish
AssignmentWho should look at this change?Matching owner or reviewer ruleThat an approval is required
ApprovalWho accepted this revision?Approval identity, scope and reviewed changeThat the content is factually correct
ValidationWhich checks ran on which input?Check results and input revisionThat a person reviewed the reader experience
PublicationWhat was released, and by whom?Release record linked to its input or artifactThat every earlier gate applied to this route

The distinction matters when teams buy a documentation platform. “Git integration” could describe how files synchronize, while “approval workflow” could describe a draft state inside an editor. Ask how each feature relates to the actual publish action. Do not assume two similarly named capabilities enforce the same policy.

Start with a sentence such as: customer-facing setup instructions require a subject-matter review of the final instructions before publication. Then identify the route that enforces it. If a hosted editor, repository integration and command-line deploy can all change the site, evaluate all three authorized routes.

This does not require an elaborate approval committee. A small team can use a short policy and one clearly accountable reviewer. The key is making the promised behavior explicit enough that a team member can demonstrate it.

An owner file is not the approval policy

GitHub automatically requests code-owner review for relevant non-draft pull requests. Requiring that approval is a separate setting. When a matching entry names multiple owners, approval from any one can satisfy the code-owner requirement; listing two names does not require both. Matching paths, valid syntax and sufficient owner permissions matter. GitHub also recommends protecting the CODEOWNERS file itself. GitHub code owners

For a docs team, the two-owner detail changes how a policy should be written. If you intend both a product expert and an editor to approve, do not translate that requirement into a list of two owners and assume it is enforced. Inspect the actual review rules and test the intended combination.

GitLab documents Code Owners for Premium and Ultimate. Its required workflow combines a protected target branch with enabled Code Owner approval. Unmatched files do not need Code Owner approval. It also warns that actors allowed to push and merge can push directly and skip merge-request-based controls. GitLab Code Owners

GitLab’s general approval documentation distinguishes optional approvals on Free from required approval rules on Premium and Ultimate. An approval button is therefore not evidence of a blocking requirement. GitLab approvals

Our recommendation is to review representative paths, rather than merely check whether an owner file exists. Include a nested guide, a newly created section, a shared content file and the ownership configuration. Keep the test focused on the effective behavior for each path. An attractive owner badge on an existing page does not answer what happens when a contributor adds a new directory.

Also separate the person who can edit the policy from the person who normally approves content. Administrative power may be necessary, but it should be understood as a distinct responsibility.

What happens when someone edits after approval?

GitHub offers stale-approval dismissal when the pull request’s reviewed diff changes, including changes introduced through the target branch. It separately offers approval of the most recent reviewable push by someone other than its pusher. These are not equivalent: the latter can retain earlier approvals. Classic branch protection also exempts administrators and bypass-capable custom roles by default unless configured otherwise. GitHub protected branches

GitLab’s approval settings describe removing approvals after added changes, using patch IDs to distinguish changes to the diff. It also supports retaining approvals or removing only affected Code Owner approvals. A changed commit identifier is therefore not, by itself, a complete description of the reset behavior. GitLab approval settings

The editorial implication is straightforward. Decide which later edits require another look, then check that your settings produce that behavior. Do not infer it from the green approval state alone.

Suppose a reviewer approved a command that targets a test environment. A later edit changes the environment name to production. The visible change may be short, but its meaning is substantial. Our recommended exercise is to make that kind of harmless, fictional change in a disposable repository and inspect whether the intended review becomes necessary again.

Now consider a mechanical update that leaves the reviewed content unchanged. That is a different case. A policy that demands a full review after every bookkeeping operation may create work without adding the assurance the team wanted. Record how the chosen platform handles the change rather than imposing an inaccurate universal rule about every push.

Keep the review boundary visible in the conversation. A reviewer can say which instructions, examples or claims were checked. The workflow can then provide evidence about whether that material changed afterward.

Compare the control you need, not just the feature name

The following table summarizes selected boundaries in the official documentation accessed on November 13, 2026. It is not a complete feature or pricing comparison. The GitHub branch row covers classic branch protection, not rulesets; self-managed versions can differ.

CapabilityDocumented scope to verifyBuyer’s question
GitHub code-owner reviewAssignment and required approval are separateIs the relevant approval actually required?
GitHub classic branch protectionPublic repositories on Free; public and private on Pro, Team and Enterprise plansDoes our repository visibility and plan support the intended rule?
GitLab merge-request approvalsFree approvals are optional; Premium and Ultimate support required rulesCan an ordinary contributor merge without approval?
GitLab Code OwnersPremium and Ultimate; protected-branch configuration mattersAre the changed paths covered, and who can push directly?
GitHub Actions environment reviewers for referencing jobsOn Free, Pro and Team, available for public repositoriesDoes this apply to our deployment job and repository?
GitLab deployment approvalsPremium and Ultimate; protected environmentsDoes the release use the protected environment?

Sources: GitHub ownership, branch protection, GitLab approvals, Code Owners, GitHub environments and GitLab deployments.

Ask for a demonstration using your intended roles and a representative documentation change. A demo performed entirely by an administrator can obscure how the normal contributor experience works. Conversely, an ordinary-user test cannot establish what privileged automation is allowed to do.

Record the plan, repository visibility, effective rule type and date with the result.

A merge approval is not a deployment approval

GitHub environment protection applies to workflow jobs that reference the environment. Required reviewers can list up to six users or teams, but one approval is enough; self-review prevention is a separate option. Environment administrator bypass is another setting. GitHub deployments and environments

GitLab describes deployment approvals as an additional gate for protected environments, blocking deployment until the required approvals are granted. By default the pipeline triggerer cannot approve that deployment, although self-approval can be enabled. Approval does not automatically start the corresponding deployment job. GitLab deployment approvals

Our inference is that you must trace the real publication route. A rule attached to one environment does not establish what happens in a separate hosting dashboard or another release mechanism. This is a scope question, not evidence that either provider’s control is broken.

Draw the route in plain language: reviewed change, merged revision, build input, deployment artifact, public site. At each transition, identify the actor and the record that connects the two sides. If another route exists, document its purpose and restrictions.

For example, your normal deployment may build the merged revision automatically. A release manager may also be able to upload a prepared artifact. That second route needs its own evidence of origin and authorization. The fact that the usual path is well controlled does not describe the exceptional one.

Decide whether a second human approval at deployment adds value. If content approval and automated release already meet the team’s policy, an additional button may be unnecessary. If timing, customer communication or a restricted production audience requires a separate decision, make that decision explicit.

Review previews without giving every draft production authority

A preview lets a reviewer inspect navigation, screenshots and rendered examples. It should be part of the content review, but running a preview build is also a workflow decision.

GitHub’s security reference warns about privileged pull_request_target and workflow_run workflows checking out untrusted pull-request content. It recommends minimum required token permissions and explains that environment secrets can be withheld until approval. These cautions concern the workflow’s privileges and inputs, not merely the text being edited. GitHub secure use

For a documentation team, our recommendation is to separate permission to propose content from permission to run privileged release work. Do not give an unreviewed contribution production credentials just because the expected change is a Markdown page.

Before enabling previews for outside contributors, have the workflow owner inspect what the build executes, which identities it uses and which secrets it can access. Use approved sample content for verification. A public research checklist is not authorization to probe someone else’s repository or expose real tokens.

For the reviewer, identify the preview’s candidate revision and distinguish it from the live site.

Reader access is a separate concern. A safe build environment does not establish who can view its output. Our private-documentation research covers that boundary in more detail.

Keep a short record from reviewed content to published result

We propose a small release record that follows the content through review and publication. Its purpose is to answer a later question without relying on memory: which version did readers receive, and which decisions authorized it?

RecordWhat to captureWhy it matters
Content candidateRevision or immutable draft identifierNames the material being considered
Review decisionReviewer, scope, time and candidate referenceConnects approval to a particular change
Effective policyRelevant rules and any explicit exceptionExplains why publication was permitted
ValidationResults, input revision and relevant previewSeparates checked behavior from assumptions
ReleaseDeployed revision or artifact identity and destinationConnects the decision to what was served
Follow-upCorrections, withdrawal or later replacementKeeps the history useful after publication

These records can be links to existing systems. A team does not need to copy every log into a new spreadsheet. Prefer stable references and a short explanation of any exception.

A source revision is especially useful when the same branch receives several changes in quick succession. A branch name describes a moving location; your release record should identify the actual input used. Where a build combines generated content or other inputs, record enough information to distinguish that output from a different build of similar source.

This is adjacent to, but different from, reproducibility. Knowing who approved a revision does not establish that you can rebuild identical files later. Our documentation rebuild research examines preserving build inputs. Here the concern is the chain of authorization and identification.

A bounded exercise for your own review workflow

The following scenarios are a proposed acceptance plan, not tests we executed against GitHub, GitLab or a customer system. Use a disposable repository and test deployment under your control. Write down the expected policy before trying to observe it.

ScenarioEvidence to inspectResult to compare with your policy
Edit a nested guideEffective owner and merge requirementsThe intended reviewer is required for that path
Add a new docs sectionMatching rule for the new filesNew content does not silently miss required review
Approve, then change an instructionApproval state after the changed diffThe new instruction receives the required review
Use an ordinary contributor accountMerge attempt and permissionsNormal contributors cannot skip a required gate
Use the authorized release identityApplicable direct-push or exception rulesAutomation has only the intended exception
Attempt a test release before approvalEnvironment decision and job statusThe selected release route enforces its gate
Compare preview and release recordsCandidate, build and deployment identifiersThe published input matches the authorized input
Change ownership configurationPolicy-change review requirementsChanges to the rules have their own accountable review

For a fictional company called Northstar Guides, imagine the support team owns troubleshooting prose and engineering owns commands. A change adjusts both. First define whether one reviewer may cover both responsibilities or whether two separate decisions are required. Then inspect whether the configured workflow reflects that answer. A vendor’s default should not quietly decide the organization’s policy.

Retain unexpected results. If a direct push succeeds because the release identity has a documented exception, describe it as an exception to review enforcement. If the team wants it removed, change the policy deliberately and verify again. Do not report the whole platform as insecure because a permitted route behaved as configured.

Record untested routes as unknown. A successful merge test does not cover manual uploads, emergency releases or an editor integration that you did not inspect.

Make review precise without making every edit expensive

Our suggested policy starts with the impact of the change. A factual change to an authentication guide needs someone who understands that behavior. A spelling correction may need a lighter path. The distinction should be visible to contributors and reviewers, with clear ownership of exceptions.

Define the smallest useful review package: the changed material, its supporting source, the intended audience and a preview when presentation affects meaning. If an example changes, identify what was checked. If an AI assistant drafted the text, preserve the same evidence expectations rather than treating fluent wording as approval. Our AI documentation evaluation report addresses that factual review.

Keep emergency publication possible where the business needs it, but make the exception explicit: who authorized it, what went out and what follow-up remains. Avoid silently redefining an emergency as ordinary reviewed work afterward.

For teams using Docsio or another documentation platform, evaluate the full path from the editor to the live site. This report does not claim that Docsio implements the GitHub or GitLab controls discussed. The buying question is whether your chosen combination of tools can demonstrate the policy you actually need, for the roles and publication routes you use.

Limitations

Hosted features, subscription tiers, self-managed versions and organization policies can differ. Classic GitHub branch protection is not a complete account of GitHub rulesets. We did not execute the scenarios or measure review effectiveness. Provider documentation describes supported behavior, not the configuration of your account. The proposed record cannot prove factual accuracy or absence of unauthorized activity, and no compliance certification is claimed.

Sources

  1. About code ownersGitHub · Accessed 2026-11-13
  2. About protected branchesGitHub · Accessed 2026-11-13
  3. Code OwnersGitLab · Accessed 2026-11-13
  4. Merge request approvalsGitLab · Accessed 2026-11-13
  5. Merge request approval settingsGitLab · Accessed 2026-11-13
  6. Deployments and environmentsGitHub · Accessed 2026-11-13
  7. Deployment approvalsGitLab · Accessed 2026-11-13
  8. Secure use referenceGitHub · Accessed 2026-11-13