Skip to content

Document TLS certificate rotation for the installer - #1510

Open
darrell-thobe-netwrix wants to merge 11 commits into
devfrom
darrell-thobe-netwrix/tls-cert-rotation-docs
Open

Document TLS certificate rotation for the installer#1510
darrell-thobe-netwrix wants to merge 11 commits into
devfrom
darrell-thobe-netwrix/tls-cert-rotation-docs

Conversation

@darrell-thobe-netwrix

@darrell-thobe-netwrix darrell-thobe-netwrix commented Sep 9, 2026

Copy link
Copy Markdown

Summary

  • Add a new task page, install/rotate-the-tls-certificate.md, covering the update-cert and rollback-cert subcommands: when to rotate, staging the certificate/CA bundle, running the rotation, the reverse-proxy caveat, rolling back, and manual recovery if rollback-cert can't apply.
  • Add update-cert and rollback-cert to the installer reference: command synopsis, full flag tables, and exit codes (72–75 for update-cert, plus rollback-cert's exit codes).
  • Link the new page from the install index.

Test plan

  • vale on all three changed files — 0 errors, 0 warnings
  • /dale on all three changed files — no violations
  • Doc reviewer confirms technical accuracy of the update-cert/rollback-cert behavior against the source engineering doc

Add update-cert and rollback-cert to the installer reference (flags,
exit codes) and a new task page walking through rotating an expiring
or untrusted certificate without reinstalling.
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Auto-Fix Summary

5 issues fixed, 8 skipped across 3 files

Category Fixes
Dale: passive-voice 5
Skipped (needs manual review) Reason

| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:20 — Dale: xy-slop | 'The installer only writes the certificate and key Secret—it doesn't update the CA bundle' is positive-then-negative and states two distinct facts, not the banned 'x is not y, x is z' substitution form |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:156 — Dale: idioms | 'by hand' is standard literal English for manual work, not a culturally specific idiom |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:162 — Dale: passive-voice | 'caBundle is already base64-encoded' describes a state of the stored value; an active rewrite would misattribute the encoding to an actor |
| docs/accessanalyzer/26.1/install/installer-reference.md:22 — Dale: xy-slop | 'reads DSPM_HOSTNAME, not HOSTNAME' is a necessary factual contrast between two similar variable names, not rhetorical negative-positive framing |
| docs/accessanalyzer/26.1/install/installer-reference.md:112 — Dale: passive-voice | 'prompts canceled with Esc or Ctrl-C' is one item in a parallel list of fragments; rewriting it breaks the list's parallel structure |
| docs/accessanalyzer/26.1/install/installer-reference.md:131 — Dale: passive-voice | 'at least 40 GB is needed to install' is verbatim installer output the reader will see on screen |
| docs/accessanalyzer/26.1/install/installer-reference.md:135 — Dale: passive-voice | 'installation may not be supported' is verbatim installer warning text |
| docs/accessanalyzer/26.1/install/index.md:6 — Dale: minimizing-difficulty | 'answer a few prompts' states the scope of the interaction factually rather than characterizing the task as easy |

Ask @claude on this PR if you'd like an explanation of any fix.

Fix the exit-code cross-reference and its accuracy around --no-rollback
and unreachable ingresses, add a maintenance-window note and a
reverse-proxy pointer before the procedure, name the dspm-tls Secret,
document the --hostname override, use placeholder hostnames in the
verification command, align exit-code and heading style with the rest
of the reference, and fix sidebar ordering between the post-install
task pages and the installer reference.
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Auto-Fix Summary

0 issues fixed, 6 skipped across 3 files

Skipped (needs manual review) Reason

| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:32 — Dale: undefined-acronyms | PEM, PFX, and P12 are industry-standard certificate file format names that a sysadmin audience knows; expanding PEM to 'Privacy Enhanced Mail' would obscure rather than clarify. CA is already defined on first use at line 16. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:162 — Dale: idioms | 'recover by hand' is a standard technical collocation for 'manually', not a figurative or culturally specific expression; the same phrasing appears in installer-reference.md line 91, so changing one would break consistency. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:39 — Dale: wordiness | 'the certificate file alone gives update-cert nothing to derive a trust anchor from' is dense, but every shorter rewrite tested either drops the reason (full-chain PEM omits the root) or changes the technical claim. |
| docs/accessanalyzer/26.1/install/installer-reference.md:32 — Dale: passive-voice | 'Needed when a private CA issued the certificate' is an elliptical table-cell fragment, matching the terse style of every other row ('Required.', 'Intended for testing only.'); rewriting it in isolation would make the table inconsistent. |
| docs/accessanalyzer/26.1/install/installer-reference.md:139 — Dale: passive-voice | 'No known antivirus product is installed or running' uses 'installed' as a state adjective describing what the check tests, not an agentive passive. |
| docs/accessanalyzer/26.1/install/installer-reference.md:105 — Dale: passive-voice | 'was loaded' appears inside backticks as a literal installer output string; changing it would misrepresent the product. |

Ask @claude on this PR if you'd like an explanation of any fix.

Fix a dropped relative pronoun, qualify the rollback claim against
--no-rollback and unreachable-ingress cases, align boolean flag
defaults and the rollback-cert exit codes with the rest of the
reference, cross-link the two docs for exit codes and cleanup steps,
define platform-service and trust anchor on first use, clarify that
the rotation timeout is a configurable default, and spell out what a
healthy CA bundle check looks like.
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Auto-Fix Summary

2 issues fixed, 15 skipped across 3 files

Category Fixes
Dale: idioms 1
Dale: passive-voice 1
Skipped (needs manual review) Reason

| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:7 — Dale: xy-slop | 'talk to the cluster directly with kubectl instead of through the product API' states the positive first and the contrast second; it is not the 'x is not y, x is z' pattern the rule targets, and the contrast carries load-bearing technical meaning. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:9 — Dale: passive-voice | 'is readable only by root' uses the adjective 'readable', not a past participle; it is not passive voice. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:20 — Dale: idioms | 'waits for the cluster to pick them up' is a standard phrasal verb, not a culturally specific idiom; rewriting risks implying a different mechanism than the cluster's own reconciliation. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:30 — Dale: undefined-acronyms | PEM is a well-known certificate encoding format for the sysadmin audience, in the same class as the rule's exempted standards (TLS, SSL, LDAP); expanding it to 'Privacy Enhanced Mail' would add noise and diverge from sibling pages that already use it undefined. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:83 — Dale: wordiness | The sentence naming the '"Recovering when rollback-cert can't restore a snapshot" troubleshooting section under [Check the Result]' is long, but every shorter rewrite drops either the collapsed section's title or the anchor, which would degrade navigation to a

Details block that has no heading of its own. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:83 — Dale: positional-references | 'under Check the Result' is a structural reference backed by a named anchor, which the rule explicitly permits, rather than a bare 'below' or 'above'. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:168 — Dale: passive-voice | 'caBundle is already base64-encoded' describes a state of the stored value; naming an actor would misstate which component performed the encoding. |
| docs/accessanalyzer/26.1/install/installer-reference.md:22 — Dale: xy-slop | '--hostname reads DSPM_HOSTNAME, not HOSTNAME' is positive-first disambiguation between two similar variable names, not the negative-then-positive pattern the rule targets; the negation is the point of the sentence. |
| docs/accessanalyzer/26.1/install/installer-reference.md:46 — Dale: passive-voice | 'must both be provided together' sits inside a backticked verbatim error string; changing it would misquote the installer's output. |
| docs/accessanalyzer/26.1/install/installer-reference.md:133 — Dale: passive-voice | 'at least 40 GB is needed to install' sits inside a backticked verbatim preflight message; changing it would misquote the installer's output. |
| docs/accessanalyzer/26.1/install/installer-reference.md:134 — Dale: passive-voice | 'the size is designed to hold GB' sits inside a backticked verbatim preflight message; changing it would misquote the installer's output. |
| docs/accessanalyzer/26.1/install/installer-reference.md:137 — Dale: passive-voice | 'installation may not be supported' sits inside a backticked verbatim preflight message; changing it would misquote the installer's output. |
| docs/accessanalyzer/26.1/install/installer-reference.md:84 — Dale: passive-voice | 'must not be expired' is an adjectival state of the certificate rather than passive voice, and matches the parallel phrasing used across the value-checks table. |
| docs/accessanalyzer/26.1/install/index.md:6 — Dale: minimizing-difficulty | 'answer a few prompts' states the actual scope of the interactive install rather than characterizing the task as easy; the page makes no claim about difficulty. |
| docs/accessanalyzer/26.1/install/index.md:26 — Dale: wordiness | 'for when you script an installation or need to find out why one stopped' reads awkwardly, but the two use cases it names are distinct and any tightening either drops one or changes the sentence into a second imperative, altering the author's framing. |

Ask @claude on this PR if you'd like an explanation of any fix.

Verified against the actual implementation (netwrix-corp/access-analyzer
commit d2ef453). rollback-cert has no exit code 72 — its real codes are
0, 1, 73, and 74. It also accepts --hostname, --port, --timeout,
--kubeconfig, and --argocd-namespace like update-cert does; only
--list, --latest, and --snapshot were documented. Also note that
update-cert's exit code 72 is reused for --no-rollback runs and for a
snapshot that couldn't be loaded, not only a successful rollback.
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Auto-Fix Summary

3 issues fixed, 6 skipped across 3 files

Category Fixes
Dale: passive-voice 3
Skipped (needs manual review) Reason

| docs/accessanalyzer/26.1/install/installer-reference.md:22 — Dale: xy-slop | "--hostname reads DSPM_HOSTNAME, not HOSTNAME" is the positive-then-negative form, not the "x is not y, x is z" pattern the rule targets, and the contrast is the point of the sentence. |
| docs/accessanalyzer/26.1/install/installer-reference.md:84 — Dale: passive-voice | "the certificate must not be expired" is a predicate adjective describing certificate state, not an agentive passive; naming an agent would change the meaning. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:20 — Dale: xy-slop | "The installer only writes the Kubernetes Secret ... it doesn't update the CA bundle" states what the installer does before what it omits; the contrast carries the warning's technical point. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:83 — Dale: positional-references | "under Check the Result" already uses a named anchor rather than a spatial direction word; "under" describes section nesting, not page position. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:168 — Dale: passive-voice | "caBundle is already base64-encoded" describes the stored value's state; which component performs the encoding isn't established in the source, so an active rewrite would assert new information. |
| docs/accessanalyzer/26.1/install/index.md:6 — Dale: minimizing-difficulty | "answer a few prompts" is a factual count of installer steps rather than a claim that the task is easy; no "easily"/"simply" framing. |

Ask @claude on this PR if you'd like an explanation of any fix.

Add --log-path (env LOG_PATH, default /var/log/dspm-installer.log) to
the flags table and update the Logs section to describe its fatal-vs-
fallback write-failure behavior: unwritable at the default path falls
back to stderr, but the same failure on an explicitly set path stops
the installer.
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Auto-Fix Summary

1 issues fixed, 13 skipped across 3 files

Category Fixes
Dale: passive-voice 1
Skipped (needs manual review) Reason

| docs/accessanalyzer/26.1/install/installer-reference.md:47 — Dale: passive-voice | The passive ("must both be provided together") is inside a backticked literal of the installer's actual error message — changing it would misquote product output. |
| docs/accessanalyzer/26.1/install/installer-reference.md:106 — Dale: passive-voice | "was loaded" appears inside a backticked literal of the installer's console output, not in prose. |
| docs/accessanalyzer/26.1/install/installer-reference.md:138 — Dale: passive-voice | "installation may not be supported" is inside a backticked literal preflight warning message. |
| docs/accessanalyzer/26.1/install/installer-reference.md:22 — Dale: xy-slop | "reads DSPM_HOSTNAME, not HOSTNAME" is a deliberate disambiguation of two similar variable names, not rhetorical negative-positive framing; removing the contrast would lose the warning. |
| docs/accessanalyzer/26.1/install/installer-reference.md:104 — Dale: misplaced-modifiers | "creates it owned by root with mode 0600 inside a 0755 directory" stacks modifiers but each attaches to the correct noun; any reordering is a stylistic preference, not a correction. |
| docs/accessanalyzer/26.1/install/installer-reference.md:128 — Dale: passive-voice | "a virtual machine provisioned at exactly the stated figure" is a participial adjective phrase modifying the subject, not a passive main clause. |
| docs/accessanalyzer/26.1/install/installer-reference.md:30 — Dale: undefined-acronyms | PEM is a standard certificate file-format acronym for a sysadmin audience; expanding it to "Privacy Enhanced Mail" would add noise without aiding comprehension, and it appears first in table cells rather than body prose. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:9 — Dale: passive-voice | "is readable only by root" uses a predicate adjective, not a passive verb construction. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:20 — Dale: xy-slop | "The installer only writes X — it doesn't update Y" states a fact and then its consequence rather than the negative-positive slop pattern; the contrast carries the warning's substance. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:83 — Dale: positional-references | "under Check the Result" names an explicit section with a working anchor; "under" describes document hierarchy, not spatial page position. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:168 — Dale: passive-voice | "caBundle is already base64-encoded" is a stative passive describing the value's format; an active rewrite would obscure that the value needs no further encoding. |
| docs/accessanalyzer/26.1/install/index.md:6 — Dale: minimizing-difficulty | "answer a few prompts" factually describes the installer's interactive flow rather than claiming the task is easy. |
| docs/accessanalyzer/26.1/install/index.md:20 — Dale: negative-assumptions | "a non-root account can't complete it" is a technical constraint of the installer's write paths, not an assumption about user capability. |

Ask @claude on this PR if you'd like an explanation of any fix.

sudo dspm-installer rollback-cert --latest

# or a specific one
sudo dspm-installer rollback-cert --snapshot /etc/dspm/cert-snapshots/2026-09-08T14-02-11Z

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
sudo dspm-installer rollback-cert --snapshot /etc/dspm/cert-snapshots/2026-09-08T14-02-11Z
sudo dspm-installer rollback-cert --snapshot /etc/dspm/cert-snapshots/<snapshot date>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Went with <timestamp> instead of <snapshot date> since that's already the placeholder used for this same path elsewhere on the page: the snapshot directory, the cleanup example, and the manual-recovery walkthrough. Keeps it consistent. Fixed in 04553ff.

Per PR feedback, --snapshot examples used a literal timestamp from
when the doc was written. Use <timestamp>, matching the placeholder
already used for this path elsewhere on the page.
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Documentation PR Review

Editorial Review

docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md

  • Structure — Line 159: the manual-recovery <details> block sits at the end of Check the Result, a section about verifying state, but its content is recovery instructions for a failed rollback. A reader whose rollback failed looks under Roll Back a Certificate, and because the block is collapsed and has no heading, it doesn't appear in the table of contents and can't be linked to directly — which is why line 83 has to describe its location in prose. Suggested fix: promote it to its own ## Recover a Snapshot Manually section placed after Roll Back a Certificate, keeping the <details> wrapper inside it if you want it collapsed, so both line 83 and the installer reference can link to a real anchor.

  • Clarity — Line 83: the pointer says "If it exits 74, see the 'Recovering when rollback-cert can't restore a snapshot' troubleshooting section," but exit 74 here comes from update-cert's automatic rollback, and the block's summary and opening sentence ("If rollback-cert itself can't apply a snapshot") name only the manual rollback-cert command. A reader who never ran rollback-cert will conclude the section doesn't apply to them. Suggested fix: broaden the summary and the opening sentence to cover both paths — for example, "Troubleshooting: recovering when a snapshot can't be restored" and "If update-cert's automatic rollback or a manual rollback-cert can't apply a snapshot, the snapshot directory still holds everything you need to recover manually."

  • Completeness — Line 87: <port> appears in "connecting to <hostname>:<port> from the install host," but the page never introduces the --port flag or its 443 default. A reader whose ingress listens on a non-standard port has no way to know from this page that the probe target is configurable. Suggested fix: "update-cert verifies the certificate by connecting to <hostname>:<port> from the install host, where <port> is 443 unless you set --port."

  • Completeness — Line 104: Roll Back a Certificate doesn't repeat the service-interruption caution given for the forward rotation at line 61. Line 126 confirms rollback-cert "restarts the workloads that consume them," so a restore has the same impact — but a reader who jumps straight to this section during an incident never sees it. Suggested fix: add a short :::note before step 1 — "Like a rotation, a restore restarts the workloads that mount the CA bundle and briefly interrupts the web application."

  • Clarity — Line 20: the warning opens with "Don't re-run the installer to change the certificate," then supports it with two facts about different actions — what the installer writes, and what ArgoCD does to a hand-edited Secret. Hand-editing the Secret is a second thing the reader shouldn't do, but it's introduced as though it were part of re-running the installer. Suggested fix: split them — "Don't re-run the installer to change the certificate, and don't edit the Secret by hand. The installer only writes the Kubernetes Secret that holds the certificate and key (dspm-tls); it doesn't update the CA bundle every pod trusts. ArgoCD reverts a hand-edited Secret on its next sync. update-cert updates both and waits for the cluster to pick them up."

  • Structure — Line 85: the heading "If the Probe Fails Behind a Reverse Proxy" is a conditional clause, so it's neither the imperative used for task headings nor the noun phrase or gerund used for concept headings. Suggested fix: "Verify Behind a Reverse Proxy" for a task framing, or "Verification Behind a Reverse Proxy" for a concept framing.

  • Clarity — Line 190: the patch command uses bare N and M as placeholders, while the rest of the page uses angle brackets (<timestamp>, <hostname>, <sha256>, <dir>) as the style guide requires. Inside a JSON pointer, a bare N also reads like a literal path segment. Suggested fix: use <n> and <m> in the command and in the comment above it.

  • Completeness — Line 7: the page assumes kubectl is present on the install host and never says where it comes from. A reader who didn't set up the cluster won't know whether they need to install it before starting. Suggested fix: add a clause noting that the k3s install places kubectl on the host, so no separate install is needed.

  • Completeness — Line 129: "Access Analyzer writes them with restricted file permissions" doesn't say which permissions, so a reader auditing the host can't confirm the snapshots are protected. The installer reference states concrete modes elsewhere (0600, 0640). Suggested fix: name the mode, as in "writes them readable only by root."

docs/accessanalyzer/26.1/install/installer-reference.md

  • Clarity — Line 197: the lead-in at line 191 promises "a code that tells you what state the cluster is in," but code 72 covers three states that differ in exactly that respect — the previous certificate was restored, --no-rollback left the new one in place, or the snapshot couldn't be loaded. A reader who sees 72 can't tell whether the cluster is serving the old certificate or the new one. Suggested fix: either give the --no-rollback and snapshot-load cases their own codes, or, if the binary genuinely returns 72 for all three, tell the reader how to distinguish them: "Check the message: it names which of the three happened, and kubectl get secret dspm-tls confirms which certificate is in place."

  • Clarity — Line 204: "Snapshots contain private key material." is a security caution dropped between a statement about pruning and a link about removal, so it reads as an aside rather than a caution. Suggested fix: move the sentence into a :::warning block after the paragraph, matching how the same point is treated on the rotation page.

docs/accessanalyzer/26.1/install/index.md

  • Structure — Line 16: certificate rotation appears only as a trailing clause on the sentence about upgrades, so it's discoverable only by a reader who reads that paragraph to the end. The page otherwise signposts its destinations with a numbered list and two H2 sections, and no other page in this folder links to the new one. Suggested fix: give rotation its own sentence or short section alongside "Scripting or Troubleshooting an Installation" — for example, a "Maintaining an Installation" section covering upgrades and certificate rotation — and consider linking it from upgrade-to-a-new-version.md, where a reader planning maintenance is likely to look.

Summary

12 editorial suggestions across 3 files. Vale and Dale issues are auto-fixed separately.


What to do next:

Comment @claude on this PR followed by your instructions to get help:

  • @claude fix all issues — fix all editorial issues
  • @claude help improve the flow of this document — get writing assistance
  • @claude explain the voice issues — understand why something was flagged

You can ask Claude anything about the review or about Netwrix writing standards.

Automated fixes are only available for branches in this repository, not forks.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Auto-Fix Summary

1 issues fixed, 13 skipped across 3 files

Category Fixes
Dale: idioms 1
Skipped (needs manual review) Reason

| docs/accessanalyzer/26.1/install/installer-reference.md:22 — Dale: xy-slop | "--hostname reads DSPM_HOSTNAME, not HOSTNAME" is a factual disambiguation of two easily confused variable names, with the reason stated immediately after. Not rhetorical antithesis; removing the contrast would delete the warning the sentence exists to give. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:32 — Dale: undefined-acronyms | PEM is a standard certificate-encoding format name in the same well-known family as TLS/SSL for a sysadmin audience. Expanding it to "Privacy-Enhanced Mail" would confuse rather than clarify. |
| docs/accessanalyzer/26.1/install/installer-reference.md:64 — Dale: undefined-acronyms | YAML is a well-known industry-standard format name for the sysadmin audience; the rule excludes well-known IT standards. |
| docs/accessanalyzer/26.1/install/installer-reference.md:18 — Dale: wordiness | "There are no single-letter flags." is already the shortest accurate phrasing; every rewrite tested was longer or less direct. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:39 — Dale: misplaced-modifiers | "for example /etc/dspm/internal-root-ca.pem" loosely attaches to "in PEM form" when it exemplifies a staging path. Fixing it requires inferring and adding a staging instruction the author did not write, which would change meaning. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:102 — Dale: wordiness | "If the new certificate turns out to be wrong" carries an after-the-fact discovery sense that the shorter "is wrong" loses. Ambiguous whether the trim preserves meaning. |
| docs/accessanalyzer/26.1/install/installer-reference.md:22 — Dale: idioms | "Two environment variable names need care" is mildly figurative, but every literal alternative considered ("are easy to get wrong", "differ from what you might expect") shifts the emphasis. Not confident in a meaning-preserving fix. |
| docs/accessanalyzer/26.1/install/index.md:16 — Dale: idioms | "how new releases roll out" uses "roll out" as established release-management terminology, not a culturally specific expression. |
| docs/accessanalyzer/26.1/install/rotate-the-tls-certificate.md:9 — Dale: idioms | "falls back to localhost:8080" is standard technical terminology (fallback behavior), not an idiom. Same for "falling back to the terminal" in installer-reference.md line 39. |
| docs/accessanalyzer/26.1/install/installer-reference.md:135 — Dale: passive-voice | Passive constructions on lines 134-143 ("is needed to install", "is designed to hold", "not loaded", "may not be supported") sit inside backticked product message strings quoted verbatim from the installer. Editing them would misreport the product's actual output. |
| docs/accessanalyzer/26.1/install/installer-reference.md:47 — Dale: passive-voice | "--tls-cert and --tls-key must both be provided together" is the installer's verbatim error message in backticks. |
| docs/accessanalyzer/26.1/install/installer-reference.md:106 — Dale: passive-voice | "Config file /etc/dspm/installer.yaml was loaded" is the installer's verbatim console output in backticks. |
| docs/accessanalyzer/26.1/install/index.md:6 — Dale: minimizing-difficulty | "answer a few prompts" states a factual scope alongside "An installation takes three steps" rather than characterizing the task as easy; no "simply", "easily", or "just" appears. |

Ask @claude on this PR if you'd like an explanation of any fix.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants