docs: give the command that produces the single-line private key - #187
Conversation
The GitHub App walkthrough tells the reader to replace every line break in the PEM with a literal \n before pasting it into the config form, but not how to do it. Pasting the file unchanged fails, because the browser replaces the line breaks with spaces and the connector rejects the result. Add the one-liner that produces the accepted form, and name the error a reader hits without it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Connector PR Review: docs: give the command that produces the single-line private keyBlocking Issues: 0 | Suggestions: 0 | Threads Resolved: 0 Review SummaryScanned the full PR diff for security and correctness: this is a documentation-only change adding six lines to Security IssuesNone found. Correctness IssuesNone found. SuggestionsNone. |
Summary
The GitHub App walkthrough tells the reader to paste the private key into GitHub App private key (PEM) with every line break replaced by a literal
\n(docs/connector.mdx:306), but does not say how to produce that value. This adds the command, and names the error a reader hits without it.Findings addressed
The instruction had no way to satisfy it —
measured.Pasting the
.pemunchanged does not work, and the reason is not guessable from the failure: measured on 2026-09-01 in Chromium 150 against the live field, a multi-line PEM pasted from the clipboard arrives on one line with each line break replaced by a space, character count preserved. The connector normalizes escaped line breaks —\n,\r\n, and a lone\r(pkg/connector/connector.go:489) — but not whitespace and not armor position, so the space-joined value is refused withinvalid private key PEM format. That message names neither the whitespace nor the escaping requirement.The command is verified, not suggested —
measured.awk '{printf "%s\\n", $0}' your-private-key.pemproduces 0 real newlines and a literal\nat every line break, including a trailing one after the END armor. That trailing escape is harmless: run against the connector at v0.4.2, the value reaches the ASN.1 stage rather than being rejected at the PEM block, which is what showspem.Decodeaccepted it. The same shape, entered through the config form, produced a full hosted sync during validation of the current release.Why it mattered
The escaped form is the field's contract, and the same contract
baton-oktahas. The page already stated it; what it left to the reader was the mechanical step, and the failure that follows getting it wrong points at neither the cause nor the fix.Scope
One addition, under the existing bullet that states the requirement. No other section changed.
🤖 Generated with Claude Code