HOT with selective index updates v73: export validation

PASS: export/application/content checks and separately completed local
runtime gates. See WORLD.txt, NATIVE32.txt, PER-COMMIT.txt and
final-results.csv for exact scope and build provenance.
No build/runtime test was performed by this export task. Focused test
results are independently collected validation evidence; this export task
only verifies their source/hash/count accounting and packages the reports.

Source branch: tepid-v73-refresh
Source tip: 2166b21415bf5885c3bc6ab3768276a87a77a2ae
Source tree: 0fc77d9a1bdea742f22a1fcffc1752321bef3ac7
Fork base: 4678ff779b7d6b5da06c3f6d1e43cdb3ecbb7430
Upstream base: 8e82d6610e7280d7870c0c36ff1c797e3cfb3e09
Excluded dev commit: e24c29d591cee57d7b9ecce3eddefa63ac7ef27b
Previous v72 source: 40e568cbfc542a36dd8fe166e84950c8ea119742
Previous v72 fork base: 72b916a20db4417cb3e825ab747236b154fdabd7
Unmodified v73 rebase: 3ffb471271f137d09176f4a8a09a456dcd98c32a

Counts: 27 source commits; 26 exported incremental patches; 26 applied
commits per base; 25 unchanged range-diff entries and two changed entries.
Only public patches 23 and 24 change stable patch IDs. Both are test-only.
Final source delta versus unmodified rebase: two files, +14/-3 lines.
All 26 patch IDs match source and both newly applied chains.
The two fork-only commits introduce exactly three CI workflows.
No source-worktree edits, branch/ref changes, pushes or AWS operations
were performed by this export task.

Export command (OUT is the package directory):
git -c format.useAutoBase=false format-patch -v73 --numbered \
  --no-cover-letter --no-signature --no-base --output-directory "$OUT" \
  e24c29d591cee57d7b9ecce3eddefa63ac7ef27b..2166b21415bf5885c3bc6ab3768276a87a77a2ae

Full-tree proof (BASE, DEV, TIP, UPSTREAM are exact hashes above):
  git diff --binary BASE DEV > dev-only.patch
  git diff --binary UPSTREAM BASE > fork-ci-only.patch
  git worktree add --detach EXPECTED TIP
  git -C EXPECTED apply --reverse --index dev-only.patch
  git -C EXPECTED write-tree  # expected fork tree
  git -C EXPECTED apply --reverse --index fork-ci-only.patch
  git -C EXPECTED write-tree  # expected upstream tree
For each base, a fresh detached worktree:
  git worktree add --detach WORKTREE BASE
  git -C WORKTREE -c core.hooksPath=/dev/null am "$OUT"/v73-*.patch
  git -C WORKTREE rev-list --count BASE..HEAD  # 26
  git -C WORKTREE diff --exit-code EXPECTED_TREE HEAD
Both complete-tree comparisons return 0, empty output. Both worktrees
are clean. No three-way fallback or manual conflict resolution. No
wholesale path exclusion: pg_regress.c and pgindent are fully compared.
Expected/applied fork tree: 9c64044503dda81aeba79fd7866b6b7322fe1e33
Expected/applied upstream tree: 091127343416a2d6f10869b6301c318bb6f7dfd2

Independent complete-source reconstruction with a fresh temporary index:
  git diff --binary OLD_BASE BASE > rebase-base-delta.patch
  git diff --binary UNMODIFIED_REBASE TIP > test-repairs.patch
  export GIT_INDEX_FILE="$EVIDENCE/reconstruction.index"
  git read-tree OLD_TIP
  git apply --cached --binary rebase-base-delta.patch
  git write-tree  # equals UNMODIFIED_REBASE tree
  git apply --cached --binary test-repairs.patch
  git write-tree  # equals TIP tree
  unset GIT_INDEX_FILE
Unmodified reconstructed tree: b457aac0943623bd57aaadbc8175f4f414ad2ef4
Final reconstructed tree: 0fc77d9a1bdea742f22a1fcffc1752321bef3ac7
Both are exact matches. The final delta only touches the two TAP files;
production code is unchanged relative to the unmodified rebase.

Stable patch-ID commands, for every source/applied commit and v72 pair:
  git show --pretty=format: --binary COMMIT | git patch-id --stable
  git range-diff --no-color OLD_BASE..OLD_TIP BASE..TIP
Full mapping below contains all 27 source entries; dev is EXCLUDED.

Independent review: ACCEPT within the two-test scope; see CF-FIXES.md.
Final-tip local Linux world: 405 passed, 0 failed, 36 skipped, total 441.
Final 26/26 per-commit gates: -Werror/assertions/injection points, fresh
239 core tests each; isolation 134 for first 16, 135 for last 10.
Native final-tree ELF32 clean COPT=-Werror build: core 239, isolation 135,
amcheck TAP 274 plus four SQL tests, recovery 060 103; no failures.
Native32 does not enable injection points and is not a full 32-bit world.
No new post-repair cfbot green claim. Included runtime reports explain
preparation's narrowly accepted TAP-only source transition and evidence.
No benchmark rerun. Prior 23b76c05 measurements remain historical.

Packaging: 34 regular files: 26 patches, README.md, VALIDATION.txt,
CF-FIXES.md, WORLD.txt, NATIVE32.txt, PER-COMMIT.txt, final-results.csv,
and SHA256SUMS. The tar also contains the v73/ directory entry. No local dev files, private infrastructure, credentials, raw
cfbot ZIPs, old benchmark attachments or build products. Hash manifest
covers every included file except itself; archive SHA256 is external.

Existing warning: patch 21 benchmark scripts/run.sh line 266 has a
trailing space. Both git am runs accept it unchanged. No claim that the
whole inherited series passes git diff --check; the two-test delta does.

=== Test-only repair stat ===
contrib/amcheck/t/007_heapallindexed_hot.pl | 10 ++++++++--
 src/test/recovery/t/060_hot_indexed_vm.pl   |  7 ++++++-
 2 files changed, 14 insertions(+), 3 deletions(-)

=== Test-only repair delta ===
diff --git a/contrib/amcheck/t/007_heapallindexed_hot.pl b/contrib/amcheck/t/007_heapallindexed_hot.pl
index 887a7380..cdae3664 100644
--- a/contrib/amcheck/t/007_heapallindexed_hot.pl
+++ b/contrib/amcheck/t/007_heapallindexed_hot.pl
@@ -115,6 +115,12 @@ $node->safe_psql('postgres', q(
 	CREATE INDEX wide_stub_a ON wide_stub(a);
 	CREATE INDEX wide_stub_b ON wide_stub(b);
 	INSERT INTO wide_stub(id, a, b) VALUES (1, 0, 0);
+));
+my $wide_stub_hoff = $node->safe_psql('postgres', q(
+	SELECT t_hoff FROM heap_page_items(get_raw_page('wide_stub', 0))
+	WHERE lp = 1
+));
+$node->safe_psql('postgres', q(
 	BEGIN;
 	UPDATE wide_stub SET a = 1;
 	UPDATE wide_stub SET b = 1;
@@ -124,10 +130,10 @@ $node->safe_psql('postgres', q(
 	  ADD COLUMN k int, ADD COLUMN l int, ADD COLUMN m int,
 	  ADD COLUMN n int, ADD COLUMN o int, ADD COLUMN p int;
 ));
-is($node->safe_psql('postgres', q(
+is($node->safe_psql('postgres', qq(
 	SELECT count(*) FROM heap_page_items(get_raw_page('wide_stub', 0))
 	WHERE (t_infomask2 & 2047) = 0 AND (t_infomask2 & 2048) <> 0
-	  AND t_hoff = 32 AND split_part(t_ctid::text, ',', 1) = chr(40) || '9'
+	  AND t_hoff = $wide_stub_hoff AND split_part(t_ctid::text, ',', 1) = chr(40) || '9'
 )), '1', 'pruned stub retains nine-attribute bitmap and null-header space');
 for my $index (qw(wide_stub_id wide_stub_a wide_stub_b))
 {
diff --git a/src/test/recovery/t/060_hot_indexed_vm.pl b/src/test/recovery/t/060_hot_indexed_vm.pl
index 1d8e15ab..665a5cd3 100644
--- a/src/test/recovery/t/060_hot_indexed_vm.pl
+++ b/src/test/recovery/t/060_hot_indexed_vm.pl
@@ -78,11 +78,16 @@ UPDATE existing SET k=11 WHERE id=1;
 });
 		my $end =
 		  $node->safe_psql('postgres', 'SELECT pg_current_wal_insert_lsn()');
+		# Avoid discovering the WAL segment size from an unused preallocated file.
+		my ($startfile, $endfile) = split /\|/, $node->safe_psql(
+			'postgres', qq{
+SELECT pg_walfile_name('$start'), pg_walfile_name('$end'::pg_lsn - 1)
+});
 		$node->stop('immediate');
 		my ($wal, $err) = ('', '');
 		ok( run([
 					'pg_waldump', '-p', $node->data_dir . '/pg_wal',
-					'-s', $start, '-e', $end, '-r', 'Heap'
+					'-s', $start, '-e', $end, '-r', 'Heap', $startfile, $endfile
 				],
 				'>' => \$wal,
 				'2>' => \$err),

=== Exact dev delta paths (content not packaged) ===
A	.clangd
A	.gdbinit
A	flake.lock
A	flake.nix
A	glibc-no-fortify-warning.patch
A	pg-aliases.sh
A	shell.nix
M	src/test/regress/pg_regress.c
M	src/tools/pgindent/pgindent

=== Exact fork-CI delta paths ===
A	.github/workflows/fork-ocr-model-check.yml
A	.github/workflows/fork-ocr-review.yml
A	.github/workflows/fork-sync-upstream.yml

=== Fork applied HEAD and tree ===
0cfd81e3c1e0ee503585b0acbc768a658180bbdc
9c64044503dda81aeba79fd7866b6b7322fe1e33

=== Upstream applied HEAD and tree ===
d8d3d86392f6fbcc0b9674ab507b856f47f7a0ff
091127343416a2d6f10869b6301c318bb6f7dfd2

=== v72 to v73 range-diff ===
1:  05e34267 =  1:  e24c29d5 dev: local dev-setup
 2:  62bbb724 =  2:  5f9fcaa6 Name the locator contract between table and index access methods
 3:  4377e753 =  3:  5262a7a1 Rename TM_FailureData.traversed to retargeted
 4:  851bdc1b =  4:  5acc79c5 Report table AM tuple failures without heap metadata
 5:  3ed7037e =  5:  cb322171 Let the executor say which version of a row it names
 6:  871163da =  6:  aa1e3ab3 Let an index AM store a variable-width locator
 7:  13b1b2d9 =  7:  0f1e8ccd Carry row copies in after-trigger events
 8:  fb4edc0f =  8:  691650d5 Support table AMs that update rows in place
 9:  29cdc54b =  9:  7648a75c Let a table AM flag bitmap groups that do not combine exactly
10:  da5dbd8f = 10:  59003e77 Improve test coverage for heap-only tuple (HOT) update behavior
11:  6e803fa0 = 11:  f08cd009 Let table AMs compare candidate attributes before an update
12:  54454cb7 = 12:  25398c34 Implement the heap AM's modified-attrs comparison callback
13:  8cef372c = 13:  221e09e2 Identify modified indexed attributes in the executor on UPDATE
14:  2e812cef = 14:  2c24f3da Prepare index maintenance for selective updates.
15:  449e5e40 = 15:  a6245da0 Add the selective-indexed on-disk format: inline attr bitmap and stubs
16:  80cc6a91 = 16:  57c580c5 Add a per-block locator-split bit to the visibility map
17:  1706586a = 17:  2248ed72 Implement heap HOT with selective index updates.
18:  051add24 = 18:  5d34e53b Extend heap statistics to include selective-indexed updates
19:  512dd02e = 19:  f6970b1a Teach amcheck to recognize HOT-indexed chains and collapse stubs
20:  e34957c6 = 20:  d984574d Add a subscription option for HOT-indexed updates
21:  6337dfbc = 21:  f57c8dde [DO NOT MERGE] Add test table AMs for the locator contract
22:  06878eef = 22:  b3c51370 [DO NOT MERGE] Add a HOT-indexed benchmark harness
23:  44c6717c = 23:  3bcc9992 Preserve HOT-indexed hop information when pruning again.
24:  5a71b6b6 ! 24:  771825c7 Check heap index coverage through validated visible anchors
    @@ contrib/amcheck/t/007_heapallindexed_hot.pl (new)
     +	CREATE INDEX wide_stub_a ON wide_stub(a);
     +	CREATE INDEX wide_stub_b ON wide_stub(b);
     +	INSERT INTO wide_stub(id, a, b) VALUES (1, 0, 0);
    ++));
    ++my $wide_stub_hoff = $node->safe_psql('postgres', q(
    ++	SELECT t_hoff FROM heap_page_items(get_raw_page('wide_stub', 0))
    ++	WHERE lp = 1
    ++));
    ++$node->safe_psql('postgres', q(
     +	BEGIN;
     +	UPDATE wide_stub SET a = 1;
     +	UPDATE wide_stub SET b = 1;
    @@ contrib/amcheck/t/007_heapallindexed_hot.pl (new)
     +	  ADD COLUMN k int, ADD COLUMN l int, ADD COLUMN m int,
     +	  ADD COLUMN n int, ADD COLUMN o int, ADD COLUMN p int;
     +));
    -+is($node->safe_psql('postgres', q(
    ++is($node->safe_psql('postgres', qq(
     +	SELECT count(*) FROM heap_page_items(get_raw_page('wide_stub', 0))
     +	WHERE (t_infomask2 & 2047) = 0 AND (t_infomask2 & 2048) <> 0
    -+	  AND t_hoff = 32 AND split_part(t_ctid::text, ',', 1) = chr(40) || '9'
    ++	  AND t_hoff = $wide_stub_hoff AND split_part(t_ctid::text, ',', 1) = chr(40) || '9'
     +)), '1', 'pruned stub retains nine-attribute bitmap and null-header space');
     +for my $index (qw(wide_stub_id wide_stub_a wide_stub_b))
     +{
25:  5aa92366 ! 25:  80238725 Initialize visibility map pages during HOT-indexed redo
    @@ src/test/recovery/t/060_hot_indexed_vm.pl (new)
     +});
     +		my $end =
     +		  $node->safe_psql('postgres', 'SELECT pg_current_wal_insert_lsn()');
    ++		# Avoid discovering the WAL segment size from an unused preallocated file.
    ++		my ($startfile, $endfile) = split /\|/, $node->safe_psql(
    ++			'postgres', qq{
    ++SELECT pg_walfile_name('$start'), pg_walfile_name('$end'::pg_lsn - 1)
    ++});
     +		$node->stop('immediate');
     +		my ($wal, $err) = ('', '');
     +		ok( run([
     +					'pg_waldump', '-p', $node->data_dir . '/pg_wal',
    -+					'-s', $start, '-e', $end, '-r', 'Heap'
    ++					'-s', $start, '-e', $end, '-r', 'Heap', $startfile, $endfile
     +				],
     +				'>' => \$wal,
     +				'2>' => \$err),
26:  ae3ccc6c = 26:  1916a99e Preserve valid anchors during concurrent index validation.
27:  40e568cb = 27:  2166b214 Limit unique-check chain rechecks to the arriving index

=== Full commit/patch-ID mapping (TSV) ===
source_index	public_patch	pre_rebase	source	fork_applied	upstream_applied	old_stable_patch_id	stable_patch_id	subject
1	EXCLUDED	05e34267938426a9c8db53daf90cc972b549bee6	e24c29d591cee57d7b9ecce3eddefa63ac7ef27b	-	-	e708b9cd13ea1792dae693cf5993ba4c7a5cb09c	e708b9cd13ea1792dae693cf5993ba4c7a5cb09c	dev: local dev-setup
2	0001	62bbb724c2f3fbed9178512c530599dbcc30d126	5f9fcaa6934ce8d52129979d41c0e812d34ff27e	6a43ea88297eec9d67f5be921fe4f6a38b8ae663	a9903f53f4c31e378c1d18bf0c55d8851f4cb7a7	440a41c81ff412b4161a6dced6289c1a8d3f2b8a	440a41c81ff412b4161a6dced6289c1a8d3f2b8a	Name the locator contract between table and index access methods
3	0002	4377e753049a198d6ae9e89035135b69c3ff8931	5262a7a1ce11d80c5e2ce9dfef173f6eb1902ab3	c742110c70612bc4755971424176a7044d987c31	ab5a698d2a44ddef289ca9d079bc20d09cc189bb	dfd6c60083b69e082d4550948843d3a3b23c3f3a	dfd6c60083b69e082d4550948843d3a3b23c3f3a	Rename TM_FailureData.traversed to retargeted
4	0003	851bdc1ba4fe6d07035488597e102be2054ebeb3	5acc79c5e47acd876ff59a90281ea2917bfdeb1e	e94f9982de9a410bc7f8a4c589f890b40e42734a	4d8db7457fcd9001aeaf52f6a5ecff0bef9cb314	079cf1a1b159a60460f531a252aa76dfdd33f0db	079cf1a1b159a60460f531a252aa76dfdd33f0db	Report table AM tuple failures without heap metadata
5	0004	3ed7037ee84f6d795decf8da1d05f680905162dc	cb32217133cac4982ea7071cf00783fb7979dca0	25651d28ac978e096e6c3ce3a2af287d22d0775f	51b109b1e727fb3e98527e9b2fe80241773eb2c7	6099daa713055967e8cb0fba1fb0aefe1a30f7e4	6099daa713055967e8cb0fba1fb0aefe1a30f7e4	Let the executor say which version of a row it names
6	0005	871163dafef566d532f0ee428d1e88d51905e8a8	aa1e3ab33e36cd1587e85f4b57bda25ef3c7cc11	edc1020cec559d558fdd928c470d853230029114	336066d9f3099d0c0e72f89e2d7900eb83240905	c09f56bd405437be75c59b9bd0333a4142f26a02	c09f56bd405437be75c59b9bd0333a4142f26a02	Let an index AM store a variable-width locator
7	0006	13b1b2d9d1b9ccfdc732d9d0ee2f9a818efc940d	0f1e8ccd37530c79a5e5ca993cb6fe46cabd0345	b617cc1df8e0d71833b249623ceb18ac89d3f37c	3ea104b42477aec31621e3739fdf0dd917df2dd4	62c19f2c60794d1109f7369b981f5d2456cbc862	62c19f2c60794d1109f7369b981f5d2456cbc862	Carry row copies in after-trigger events
8	0007	fb4edc0f38777450c63cbe19d03ad837251379b7	691650d54ec75693743d615073529361326893b4	0bea73d69786d4721f30160ce5c4976117a198b1	a19168eaea115a36761937e5c21e3845945aff64	495c8a8448168bcebaba31e789651fa60f03ca4f	495c8a8448168bcebaba31e789651fa60f03ca4f	Support table AMs that update rows in place
9	0008	29cdc54b0d3ca389fd9a03f999c24cd4c585fa50	7648a75ce98a2bc0ef25bd7c7e9e71ae1ab953ba	c38ebc321b8e60be8be5a02598b13924b0a14e1b	9fe81d187a3285d85a20a1bb60c2ad6cef55179f	196cf21bea3e42dcc490ff0d7715f19f94eb6fef	196cf21bea3e42dcc490ff0d7715f19f94eb6fef	Let a table AM flag bitmap groups that do not combine exactly
10	0009	da5dbd8facba43675d9ec022c855d84e662dda0a	59003e77467aa78bf62bdb7f1018abc49354b68b	d5921421ff894e38e18ee97177a67d7492148ea1	5666f816ce9fa1f80034f01239bf946ed0d54dae	73cadbbfe8eed0c8e7501e0a3cab755169261802	73cadbbfe8eed0c8e7501e0a3cab755169261802	Improve test coverage for heap-only tuple (HOT) update behavior
11	0010	6e803fa02cdc8e9da767c7ad325106d8d812043d	f08cd009be27efa402665bfd6e1e1ebfbb9c47de	cf5b1082185c95f6a10dddd69cfa36a5bafa7446	a2182750156bcceb0a41ed0ab003e1377a7b681e	bcc4988d3cd4589232da7a075a05e50742779a54	bcc4988d3cd4589232da7a075a05e50742779a54	Let table AMs compare candidate attributes before an update
12	0011	54454cb7fe56e1fc1aacf18e04c26eda3dd19b75	25398c3466231e6fa3b48cdec753bb212d741d57	304d2030e80500711954fdbe5f7b8fd88964e6a3	8a74499a9447bfe8d752ca0b6bd4da411b3bc23b	798f8e60de50b1c75441b67a166302871d5ca6c5	798f8e60de50b1c75441b67a166302871d5ca6c5	Implement the heap AM's modified-attrs comparison callback
13	0012	8cef372c2d0adddf49015a8d4f7e42cc37102e97	221e09e270f14bd587edc3095f5beb85c48cc3be	e5bf6a90c20d313cff5fb2696b5aeaa4154258ef	3d05583dc74365824f633ed7b64cf3d56347d1cb	fb10094e2d72d6700e6aed7fd0ea33424f156824	fb10094e2d72d6700e6aed7fd0ea33424f156824	Identify modified indexed attributes in the executor on UPDATE
14	0013	2e812cef942dc05109d290b64d2e192d33f4d2d7	2c24f3da39d6c6481f7b433ce77ea3136ad91cd1	a6b4dee371cf709e8d0d92d44116421fa63eaa1e	541e602e0ab74d1b3d048cc86c35a38b07ae556b	91a86a2ebcc2fb56c56fa244d09fb05affd9d618	91a86a2ebcc2fb56c56fa244d09fb05affd9d618	Prepare index maintenance for selective updates.
15	0014	449e5e4076b044a577bacfa9541984c793f37810	a6245da069e86fed3e1e38b65a6b38fc0488eabb	6c04e9b28be4e9f48b8c0a851ebc352c4ecacb3f	726589435d62b30b2bb7582cedd38499396663ee	3d11a3583177099643d4ea4696e497f6da6adff7	3d11a3583177099643d4ea4696e497f6da6adff7	Add the selective-indexed on-disk format: inline attr bitmap and stubs
16	0015	80cc6a918d42c427b3f76e49486c632274b8a886	57c580c5c88059b4d5ff5f871b19e08de9f1d6b8	0b9af21f18d3b8688fb05bd642ff12f8b64b4d94	8eaafba1b3f90b24fd12a89b394ec8a872f7f6db	a6990b009d653d495bf6a19a5b5e32ca05796a93	a6990b009d653d495bf6a19a5b5e32ca05796a93	Add a per-block locator-split bit to the visibility map
17	0016	1706586a511f7b35e830b467bc894834c5b3b9f5	2248ed72de9cba25b58cda53ae353d867ca6aa16	3d178489b6868e0b1a0988d012647df8d05d9e9a	116d5fc3354c00206417195611c5938af7b18399	0d3df3688c7d66b3042e708eca645625c3a0a26d	0d3df3688c7d66b3042e708eca645625c3a0a26d	Implement heap HOT with selective index updates.
18	0017	051add2418c528398c0ea30ae9411573e725a883	5d34e53b820077460ce773f005b4b41192051dfd	710cfe6ba03eb675530826712e44d9ede7ba15be	90d45ca0f9f75048be36bde9a8bcf05cfe1556d4	a678ee48f231206af315699dbd0d75ddaada0812	a678ee48f231206af315699dbd0d75ddaada0812	Extend heap statistics to include selective-indexed updates
19	0018	512dd02e5efce48e45039ace64de3183e9208bd0	f6970b1a8b2a1b26d21b94011d43b662719f89ce	1baf51173ffd8c14c91bb5406927d4ff49759798	d43c0b945a12abc97334170f2f21a778e6d369d8	15e927aaa1acf298b3dabf00bee6ca011a441477	15e927aaa1acf298b3dabf00bee6ca011a441477	Teach amcheck to recognize HOT-indexed chains and collapse stubs
20	0019	e34957c63e25eceb012d6e02598a40bd9ece8ddc	d984574dc8e8e539396d86b0f967309dc2832289	15ca5620e80bebe84039c23385a8eaf436037cc4	a1c94a6cffbb08726ded9724879d686a3d9718a5	d8c85a3275d2ac9c1d619154399d49ab91584115	d8c85a3275d2ac9c1d619154399d49ab91584115	Add a subscription option for HOT-indexed updates
21	0020	6337dfbc0b7f164f64cb34327adec83fae5bfc4e	f57c8ddecfd4bed5b99dcc9710e6b80b0134b1fb	bafa0d2adc502e078a24ef365731fb7dd5eb6aa5	fd31b3fcc67f086ed2245c6025cca0f3e8d08650	bb97a4a0eaaee8abeef39cd2f3a1ce96c5dfe1ec	bb97a4a0eaaee8abeef39cd2f3a1ce96c5dfe1ec	[DO NOT MERGE] Add test table AMs for the locator contract
22	0021	06878eefe6070977eb8529ef038bc678c1923888	b3c5137097cc8bc4475ad52dbe96dd14f35880af	840f523e6771c3008d0fb54c5e291a0ba26c3e99	edeb12a2018583aef46be3d9c709183407cf49c4	d33de901245fc15d674574777b8986dffe7833d0	d33de901245fc15d674574777b8986dffe7833d0	[DO NOT MERGE] Add a HOT-indexed benchmark harness
23	0022	44c6717ca29911505323e647a6a3cad2fa80ebb2	3bcc9992580da77e434c746a7f96c992927cee59	b54bd232377d7f142cb79835b942412358baed50	6775d23687d07c604df32eaca5eca47b4aa4dc70	fc9b69a8b63f291ee3e0c16dbdb10fa3625040c7	fc9b69a8b63f291ee3e0c16dbdb10fa3625040c7	Preserve HOT-indexed hop information when pruning again.
24	0023	5a71b6b6e9d3f023bd6c2f9da0bf9891bd58a6b2	771825c7c23d99a2ae0845a45b08cab7c5184dfb	5224a0febb5ff2ab281e59f0405e4b9d92d30728	9f3f90dae3abc8f1fd592fcf892ab78ed83e300a	5304fab2ec3dc24bdcc95c1d8065fa5868082bf6	83cbc4480595830e319efc03589ed8586b77eec7	Check heap index coverage through validated visible anchors
25	0024	5aa923662de0ba264b7c7614c724e44a3a6114ec	80238725b06cf6819356bc877e4c33eb73c96f87	5aa2ae1de513385651c0014eaadf3f98c23eb362	698174dbae81927664781e3eae17cdf125b14c38	f5db1521f67f376a9261fcc523b9b5d573ab11ed	f00fa2b5ab6d00d963d3d90c46593783987c05ed	Initialize visibility map pages during HOT-indexed redo
26	0025	ae3ccc6cb67946dac0f9b795cc86de51dd674d0e	1916a99e8ff6562d2f3800c85b08956299fbbca3	1f39c174158abd446fc097cba71076093ce43a30	41cf39917a7363e8e44580ab9f88f87f7c9eeb7e	fe700f74e7adb760775a2fd85c19ca0011d71ec6	fe700f74e7adb760775a2fd85c19ca0011d71ec6	Preserve valid anchors during concurrent index validation.
27	0026	40e568cbfc542a36dd8fe166e84950c8ea119742	2166b21415bf5885c3bc6ab3768276a87a77a2ae	0cfd81e3c1e0ee503585b0acbc768a658180bbdc	d8d3d86392f6fbcc0b9674ab507b856f47f7a0ff	312a0e92f6ee9b7fc80afa0f4884e36c24dee139	312a0e92f6ee9b7fc80afa0f4884e36c24dee139	Limit unique-check chain rechecks to the arriving index

=== Fork apply log ===
patch 21:643: trailing whitespace.
  local seedopt="--random-seed=$seed" 
warning: 1 line adds whitespace errors.
Applying: Name the locator contract between table and index access methods
Applying: Rename TM_FailureData.traversed to retargeted
Applying: Report table AM tuple failures without heap metadata
Applying: Let the executor say which version of a row it names
Applying: Let an index AM store a variable-width locator
Applying: Carry row copies in after-trigger events
Applying: Support table AMs that update rows in place
Applying: Let a table AM flag bitmap groups that do not combine exactly
Applying: Improve test coverage for heap-only tuple (HOT) update behavior
Applying: Let table AMs compare candidate attributes before an update
Applying: Implement the heap AM's modified-attrs comparison callback
Applying: Identify modified indexed attributes in the executor on UPDATE
Applying: Prepare index maintenance for selective updates.
Applying: Add the selective-indexed on-disk format: inline attr bitmap and stubs
Applying: Add a per-block locator-split bit to the visibility map
Applying: Implement heap HOT with selective index updates.
Applying: Extend heap statistics to include selective-indexed updates
Applying: Teach amcheck to recognize HOT-indexed chains and collapse stubs
Applying: Add a subscription option for HOT-indexed updates
Applying: Add test table AMs for the locator contract
Applying: Add a HOT-indexed benchmark harness
Applying: Preserve HOT-indexed hop information when pruning again.
Applying: Check heap index coverage through validated visible anchors
Applying: Initialize visibility map pages during HOT-indexed redo
Applying: Preserve valid anchors during concurrent index validation.
Applying: Limit unique-check chain rechecks to the arriving index

=== Upstream apply log ===
patch 21:643: trailing whitespace.
  local seedopt="--random-seed=$seed" 
warning: 1 line adds whitespace errors.
Applying: Name the locator contract between table and index access methods
Applying: Rename TM_FailureData.traversed to retargeted
Applying: Report table AM tuple failures without heap metadata
Applying: Let the executor say which version of a row it names
Applying: Let an index AM store a variable-width locator
Applying: Carry row copies in after-trigger events
Applying: Support table AMs that update rows in place
Applying: Let a table AM flag bitmap groups that do not combine exactly
Applying: Improve test coverage for heap-only tuple (HOT) update behavior
Applying: Let table AMs compare candidate attributes before an update
Applying: Implement the heap AM's modified-attrs comparison callback
Applying: Identify modified indexed attributes in the executor on UPDATE
Applying: Prepare index maintenance for selective updates.
Applying: Add the selective-indexed on-disk format: inline attr bitmap and stubs
Applying: Add a per-block locator-split bit to the visibility map
Applying: Implement heap HOT with selective index updates.
Applying: Extend heap statistics to include selective-indexed updates
Applying: Teach amcheck to recognize HOT-indexed chains and collapse stubs
Applying: Add a subscription option for HOT-indexed updates
Applying: Add test table AMs for the locator contract
Applying: Add a HOT-indexed benchmark harness
Applying: Preserve HOT-indexed hop information when pruning again.
Applying: Check heap index coverage through validated visible anchors
Applying: Initialize visibility map pages during HOT-indexed redo
Applying: Preserve valid anchors during concurrent index validation.
Applying: Limit unique-check chain rechecks to the arriving index

=== Export header checks ===
PASS: 26 source hashes, authors, numbered v73 headers/filenames and exported stable patch IDs.
PASS: no Git signature or base/prerequisite trailers; exact +14/-3 two-TAP-file final delta.

=== Final public runtime report/CSV checks ===
All 26 CSV commits match the final source chain in order; every tree hash
matches git rev-parse COMMIT^{tree}. All four exit-code columns are zero.
Core count 239 for all; isolation 134 for first 16, 135 for last 10.
Public metadata strips personal absolute paths; raw evidence references
are explicitly local and not bundled. No raw cfbot logs/ZIPs included.
