Repository navigation
test: objstore_userinfo gets its pytest twin, every check by the shell's name (#1341) - #1378
Conversation
jdatcmd
left a comment
There was a problem hiding this comment.
Approving 416cf02 on content. Reproduced on PG18.
- Green: shell 26/26; pytest 3 passed;
compare_to_bash: 26 literal matches, 0 missing. - Red: with the
os_write_handleuserinfo guard disabled (objstore/columnar_objstore_module.c:1795,if (false && memchr(…))), both twins fail the same two names:
FAIL and the export_parquet message names userinfo: got [0] want [1]
FAIL export_arrow refuses userinfo through the same handle (22023): got [42501] want [22023]
Notes, not blocking:
- Inherited from main: "export_parquet refuses userinfo (22023, not an allow-list 42501)" stays green with that guard removed, in both twins. The 22023 likely comes from parsing
u:p@as a port (unverified). The suite header's claim that the write arms "read 42501 again" is half true. That belongs on #1339. - The twin's "…names no userinfo" controls read only the primary message. The shell greps all of psql's output, including DETAIL and HINT.
- Unlike #1379 and #1380, this PR seeds no ledger rows.
Before merge: a rebase. TESTS.md §105 is taken on main by test_import_export_privilege.py, and cluster_tests and expected_tests.txt conflict.
416cf02 to
4799e34
Compare
|
Rebased onto 57f6e0e (#1401), on top of #1403. The new head is 4799e34. Only the count files changed, so this needs your re-approval.
🤖 Generated with Claude Code |
|
Re-run finished on the tree after #1403 (758039f or later). Everything is green, so the head above stands:
🤖 Generated with Claude Code |
4799e34 to
d0febce
Compare
|
Rebased onto 7da848d (#1432, #1409). The new head is d0febce; only the count files changed, so please re-approve this head.
🤖 Generated with Claude Code |
d0febce to
8aa85df
Compare
|
Rebased onto 1f7b5da (#1411, #1412, #1417, #1418). The new head is 8aa85df. Only the count files changed, plus TESTS.md section numbers where main took 115, so please re-approve this head.
🤖 Generated with Claude Code |
|
The PG18 re-run on this head (8aa85df, on 1f7b5da with #1412's index-build change) is all green:
🤖 Generated with Claude Code |
|
Rebased onto 37ea557 (#1414, #1425). The new head is 6e50c49. Only the count files changed, so please re-approve this head.
🤖 Generated with Claude Code |
8aa85df to
6e50c49
Compare
|
Rebased onto f2bd5f1 (#1427). The new head is bb6b091. Only the count files changed, so please re-approve this head.
🤖 Generated with Claude Code |
6e50c49 to
bb6b091
Compare
bb6b091 to
0349440
Compare
|
Rebased onto 2d1a77f (#1413–#1424). The new head is 3671017, so please re-approve this head.
🤖 Generated with Claude Code |
0349440 to
3671017
Compare
jdatcmd
left a comment
There was a problem hiding this comment.
Re-approved at 3671017, the rebase onto 2d1a77f. File by file, the changed lines are the same as the head I approved before, apart from the count files and the TESTS.md section number.
🤖 Generated with Claude Code
…ws are reworded The mutation column is a ';'-separated set, written back sorted. A --mutation whose text held "; " was stored as two mutations, one a fragment starting with a space, and every later merge re-sorted it. commandprompt#1427's recovery_minimal_wal text did this to 8 rows, and commandprompt#1423, commandprompt#1424 and commandprompt#1426 each carried them as a change of their own. Four older harness_selftest rows were split the same way. - merge refuses a --mutation holding ';' (rc 2, ledger untouched). - the reader refuses a ';'-piece with whitespace at an end, by line: the writer joins with a bare ';', so such a piece is a fragment, never a mutation. - the 12 rows are reworded without ';', from their original text in history. Only field 6 changes; the census stays 3007 / 2282 / 725. Red first: the two refusal arms got 0 want 2 on the unchanged tool, and the committed-ledger arm was red at line 1783 with the refusal in and the rows not yet reworded. guard_tests 435 -> 438 by collection. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rompt#1341 item 75) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…ment-mark mutation (commandprompt#1341 item 75) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…wn privileges, in both twins (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…d the refused tier writes no file, in both twins (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…ITY DEFINER (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
… back; both its branches echoed "ran" (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…ll's name (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…nd every owner arm reports a number when refused, in both twins (commandprompt#1341) A guard widened to refuse the owner stopped the fixture's own export, so a premise reddened for the product code and the pytest twin crashed in setup rather than failing an arm by name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…e mutations of the RLS guard (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
… in both twins (commandprompt#1341, commandprompt#1397 review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…uals (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…x, and the twin fails it by name rather than raising (commandprompt#1383 review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
commandprompt#1383 review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…name (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… arm runs with the configured list empty, in both twins (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n comparing two empty strings (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…andprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d the shell names 'empty' itself (commandprompt#1379 review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…dated (commandprompt#1379 review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VjTxfQJj5pnii9wzmPP9Ho
…l's name (commandprompt#1341) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Restated for the chain you asked for. The new head is 3baef6a, so please re-approve this head.
🤖 Generated with Claude Code |
3671017 to
3baef6a
Compare
jdatcmd
left a comment
There was a problem hiding this comment.
Re-approved at 3baef6a, its place in the chain on 17420be. This PR's own commits, measured from the link below it, change the same lines as the head I approved before, apart from the count files and the TESTS.md section number.
🤖 Generated with Claude Code
Part of #1341: the High twin-parity item "userinfo in a caller-written URL is refused (22023) on every path".
objstore_userinfo.shhad no pytest twin.test_objstore_userinfo.pyis one now, covering all 26 shell checks by name, and it is added toCOMPLETEsocompare_to_bashholds it there. The existingtest_objstore_endpoint_userinfo.pycovers the endpoint half independently and says it doesn't pair with the shell, so it's left as it is.The twin
Three tests: the URL guard, the controls, and the configured-endpoint guard.
AWS_ENDPOINT_URLorAWS_ACCESS_KEY_ID, as the shell'smsg_of/msg_hasdo.test/*.sh.Proof it is a twin, not just a file
The write path's userinfo guard removed (
os_write_handle, the shell header's own removal proof). PG17, main 4027b8d against this branch:The export is still refused 22023, by a different guard, so only the message tells the userinfo guard is gone. Both twins see that.
Evidence
cluster_tests533 → 536. test: parallel_copy and parallel_export_parquet refuse a table the caller holds no grant on; import_export_privilege gets its twin and its ledger (#1341) #1362 also takes section 105 and movescluster_tests; it lands first, so I'll renumber and restate on rebase.🤖 Generated with Claude Code