Skip to content

Add X-Blog-Check to the keep-list this document already describes - #84

Merged
ptr727 merged 3 commits into
developfrom
fix-keeplist-contradiction
Aug 9, 2026
Merged

Add X-Blog-Check to the keep-list this document already describes#84
ptr727 merged 3 commits into
developfrom
fix-keeplist-contradiction

Conversation

@ptr727

@ptr727 ptr727 commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Found by Copilot review on #83, the promotion. A contradiction inside OPERATIONS.md, introduced by #81.

The contradiction

The outward pass now filters on X-Blog-Check, and the access-log section two hundred lines later said:

Request headers are dropped except Referer and User-Agent

Both cannot be true. The host added X-Blog-Check to Traefik's keep-list when the header was introduced — that is the only reason request_X-Blog-Check appears in the log at all — so the log description had simply gone stale and my new section was written against the current reality without reconciling the old one.

The fix, and why it is more than adding a word

The keep-list now names all three, and is stated as the precondition the outward pass depends on rather than as trivia:

a header absent from it does not appear in the log at all, which is indistinguishable from a request that never sent one

Which is the negative-result rule this file states as a trap, applied to the filter it was written beside. #81 recorded that the precondition exists; this names where it lives and what enforces it.

The reason the list is an allowlist is unchanged and still the point: it keeps the Pangolin resource access token out of a file that is retained and copied off the host. Adding a header to it is a host-side change and safe only for a value that is not secret, which the tag is not.

The access-log section said request headers are dropped except Referer
and User-Agent. The host added X-Blog-Check to that allowlist when the
header was introduced, which is the only reason request_X-Blog-Check
appears at all, so the outward pass and the log description contradicted
each other in the same file.

The keep-list is named as the precondition rather than left as trivia. A
header absent from it does not appear in the log, which reads exactly like
a request that never sent one, and that is the negative-result trap this
file now states as a rule.

The reason the list is an allowlist is unchanged and still the point: it
is what keeps the Pangolin resource access token out of a file that is
retained and copied off the host.

Found by Copilot review on #83.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 9, 2026 17:46

Copilot AI 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.

Pull request overview

This PR updates OPERATIONS.md to resolve an internal contradiction about which request headers Traefik retains in its access log, aligning the documented “keep-list” with the current outward-pass filter behavior that depends on X-Blog-Check.

Changes:

  • Update the documented Traefik access-log header allowlist to include X-Blog-Check alongside Referer and User-Agent.
  • Clarify that the host-side keep-list is a prerequisite for the outward log-filter pass (absence in the log is indistinguishable from absence on the request).

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread OPERATIONS.md Outdated
"Request headers are dropped except" reads as Traefik stripping them
from the request. That would mean the Pangolin access token never
reaches the site, and the staging gate works, so a reader who took it
that way would be left with two facts that cannot both hold.

It now says the log records three and omits the rest from the record
rather than from the request, which still arrives intact.

Found by Copilot review on #84.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 9, 2026 17:49

Copilot AI 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.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (1)

OPERATIONS.md:302

  • This paragraph names the header names (Referer, User-Agent, X-Blog-Check), but elsewhere this document consistently refers to the Traefik access-log JSON field names (e.g. request_X-Blog-Check, request_Referer). Calling out the access-log keys here as well would avoid confusion about what exact fields appear in /var/log/traefik/access.log.
**On the VPS the reviewable record is Traefik's access log**, at `/var/log/traefik/access.log`, one JSON object per line, one line per request, across every hostname the host serves. `RequestPath` carries the query string, so the legacy `/?p=<id>` traffic is visible as itself. The log records only three request headers, `Referer`, `User-Agent`, and `X-Blog-Check`, and omits the rest from the record rather than stripping them from the request, which still arrives intact. That omission is what keeps the Pangolin resource access token out of a file that is retained and copied, and query strings are logged in full, so treat an extract as sensitive. That keep-list is the host's to hold and is the precondition the outward pass depends on: a header absent from it does not appear in the log at all, which is indistinguishable from a request that never sent one.

The sentence named the headers where the rest of the section names the
JSON keys, so it described the policy without giving the thing anyone
parsing the file actually needs. The three now appear as
request_Referer, request_User-Agent and request_X-Blog-Check, which is
the form already used in the jq examples above and below it.

Found by Copilot review on #84, as a suppressed comment.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ptr727

ptr727 commented Aug 9, 2026

Copy link
Copy Markdown
Owner Author

Fixed. Right — I named the policy and not the thing anyone actually greps for. The rest of the section works in JSON keys, including the jq examples immediately above and below.

Now request_Referer, request_User-Agent, request_X-Blog-Check. Checked the whole file for consistency afterwards:

3  request_Referer
3  request_User-Agent
2  request_X-Blog-Check

Worth noting the section already carries a trap about exactly this naming — .request_User-Agent parses as subtraction because of the hyphen, and .["request_User-Agent"] is the form that works. Giving the keys here rather than the header names is what makes that trap reachable from the sentence that introduces them.

Copilot AI review requested due to automatic review settings August 9, 2026 17:52

Copilot AI 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.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@ptr727
ptr727 merged commit 2c8d4be into develop Aug 9, 2026
5 checks passed
@ptr727
ptr727 deleted the fix-keeplist-contradiction branch August 9, 2026 18:07
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.

2 participants