Skip to content

Remove merge conflict markers from a published page, and gate against them - #442

Merged
jdatcmd merged 1 commit into
commandprompt:mainfrom
ChronicallyJD:fix/docs-conflict-markers
Aug 6, 2026
Merged

Remove merge conflict markers from a published page, and gate against them#442
jdatcmd merged 1 commit into
commandprompt:mainfrom
ChronicallyJD:fix/docs-conflict-markers

Conversation

@ChronicallyJD

Copy link
Copy Markdown
Collaborator

docs/limitations.md has three raw merge conflict markers on main, under Vacuum and
compaction
. They are live on the documentation site right now.

<<<<<<< HEAD
- `autovacuum_parallel_workers`, the per-table storage parameter PostgreSQL 19 adds ...
- `VACUUM FULL` and `CLUSTER` are not supported on a columnar table; the
=======
- `REPACK`, `VACUUM FULL` and `CLUSTER` are not supported on a columnar table; the
>>>>>>> origin/main
  `pgcolumnar.vacuum_full` instead.

Introduced by the merge at a0c8189.

The resolution is a union, because both arms are right

The autovacuum_parallel_workers bullet is additive: it documents #398 and is pinned by
test/pg19_vacuum_options.sh. The REPACK bullet supersedes the older VACUUM FULL
and CLUSTER one, because REPACK dispatches through the same copy-for-cluster path and is
refused for the same reason, which is #399 and is pinned by test/native_repack.sh.

Both kept, in that order. No prose invented.

Why it reached main is the more useful half

Every check in docs_style.sh passed with the markers present. I ran it myself on main
earlier today and got twelve pages ok.

Conflict markers are valid Markdown text. The STE checker reads prose and counts words. The
nav check reads mkdocs.yml. mkdocs build --strict resolves links and finds nothing wrong
with a paragraph that happens to begin <<<<<<< HEAD. Nothing was asking whether the page
is a coherent document.

So docs_style.sh now fails on a conflict marker anywhere in docs/ or in a top-level
Markdown file.

Removal proof

Same suite, same box, only the page differing:

main's docs/limitations.md    FAIL  no document carries a merge conflict marker:
                                    got [docs/limitations.md] want [none]
                                    docs_style.sh: FAILED
resolved                      PASS  no document carries a merge conflict marker
                                    docs_style.sh: PASSED

My first attempt at that proof reported FAIL on both arms, because I had edited the file
without committing and git checkout HEAD -- restored the unfixed version. The proof caught
my own mistake, which is the argument for running it rather than reasoning about it.

Scope

Deliberately only this. The content work from the external validation report is #440 and I
have kept it separate, since a broken published page should not wait behind a review of new
prose.

🤖 Generated with Claude Code

…gainst them

docs/limitations.md carries three raw conflict markers on main, under "Vacuum and
compaction":

    <<<<<<< HEAD
    ...
    =======
    ...
    >>>>>>> origin/main

They are live on the documentation site. Both arms were correct, so the
resolution is a union: the autovacuum_parallel_workers bullet is additive, and
the REPACK bullet supersedes the older VACUUM FULL and CLUSTER one, since REPACK
dispatches through the same path and is refused for the same reason.

The reason this reached main is worth more than the fix. Every check in
docs_style.sh passed with the markers present, because conflict markers are
valid Markdown text. The STE checker reads prose. The nav check reads mkdocs.yml.
mkdocs build --strict resolves links. None of them asks whether the page is a
coherent document.

So docs_style.sh now fails on a conflict marker in docs/ or in any top-level
Markdown file. Removal-proved: it fails against main's copy of the page and
passes against the resolved one.

Found while verifying an unrelated documentation claim, which is the only reason
anybody looked.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UqprqkCXuH8SegiZejE1Tw

@jdatcmd jdatcmd left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This is my defect. Thank you for catching it, and the gate is the right response.

git log -L on those lines:

e8122d8  Joshua D. Drake  2026-08-05
Merge remote-tracking branch 'origin/main' into feat/398-pg19-vacuum-options

That is my conflict resolution on #412, early yesterday. I resolved
test/run_all_versions.sh with a script, then ran git add -A && git commit --no-edit.
git add -A staged docs/limitations.md with its markers still in it and marked the
path resolved, so the commit succeeded and the merge looked clean.

I resolved one file and assumed one file was all there was. git diff --name-only --diff-filter=U would have told me otherwise in one command, and I have used exactly that
command in later resolutions this session without connecting it back to this one.

It then survived every merge since, because nothing looks.

The fix and the gate, both verified

Prose reads correctly with the REPACK sentence intact and no duplication.

The gate, removal-proved:

clean tree                     PASS  no document carries a merge conflict marker  (6 checks)
markers appended to a doc      FAIL  no document carries a merge conflict marker: got [.../docs/limitations.md]

Your framing of why this got through is the part worth keeping, and it generalises past
this bug:

The STE checker reads prose and the nav check reads mkdocs.yml. Neither asks whether the
page is a coherent document.

Conflict markers are valid Markdown. Every existing check passed with them on the page,
which is the same shape as check "" "" and ALL VERSIONS PASSED with nothing run: the
check that ran and the check you thought ran were different things.

One suggestion, not blocking

The grep covers docs/ and top-level *.md. The same accident in design/ or in a
test/*.sh header would not be caught, and design/ is where our own decisions live.
Widening it costs nothing:

grep -rlE '^(<<<<<<< |>>>>>>> )' "$SRCDIR/docs" "$SRCDIR/design" "$SRCDIR"/*.md "$SRCDIR"/test/*.sh

Not blocking because the published site is the urgent surface and that is covered. Your
call whether it belongs in this PR or a follow-up.

Approving, and merging as soon as CI is green. This one should not sit.

@jdatcmd
jdatcmd merged commit 83d4c84 into commandprompt:main Aug 6, 2026
11 checks passed
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