CI: Document current OID-repair/self-healing behavior - #37
Conversation
Ground-truth reference for how object_reference's object-identity tracking and OID-repair/self-healing logic behaves today on master, covering the core model, every write/repair path, config-dump marking, three end-to-end scenarios (dump/restore, binary pg_upgrade, stale-row + rename), and independent confirmation of three known bug claims (_object_oid__add's missing ON CONFLICT, fix_refs's r_object typo, _etg_fix_identity's lack of a staleness guard) — all backed by direct code citations and real reproductions in scratch databases. Documentation only, describing current behavior; no design proposals (tracked separately in issues Postgres-Extensions#24/Postgres-Extensions#25). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Claude finished @jnasbyupgrade's task in 5m 38s —— View job Claude finished @jnasbyupgrade's taskTask list
CI is green ( SummaryThis is a documentation-only PR (single new file, no code changes), and it holds up very well under scrutiny. I verified every "verbatim" SQL quote in the document character-by-character against
Also confirmed: the dangling Minor nits (citation-only, don't affect correctness of conclusions)
None of these affect the document's substantive conclusions — they're citation-precision slips in an otherwise very carefully sourced and empirically-verified document. No changes are required before merging; the nits above are optional polish. |
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Corrects five line-number/wording slips flagged by CI review: the _etg_drop create_function start line, a fictitious WHEN NOT r_object_v.ids_ok CASE arm, the object__getsert signature range, the event-trigger registration range, and a "below" that should say "above". None affect the document's substantive conclusions.
|
Claude here — fixed all five citation nits from the review above in dabe793:
All verified directly against |
|
Claude finished @jnasbyupgrade's task in 1m 15s —— View job Claude finished reviewing this PRTask list
SummaryThis PR is unchanged in substance since the last review — the only new commit (
All five corrections are accurate and no new issues were introduced by this commit — it's a pure precision fix with no changes to the document's substantive content or conclusions. As covered in the prior review round, the document's core claims (the No further changes needed — this is ready to merge as far as documentation accuracy goes. |
Scenario (b) claimed _sentry_mv's binary-upgrade crash reflects a
generic populated-matview-vs-binary-upgrade limitation. It doesn't:
pg_dump only routes a matview through REFRESH MATERIALIZED VIEW (the
thing that actually crashes under --binary-upgrade) when the matview
is marked via pg_extension_config_dump(), which is _sentry_mv-specific.
An ordinary populated matview survives via a physical heap copy plus a
relispopulated poke, with no REFRESH involved. Confirmed by running a
real PG12->PG17 pg_upgrade against a database with only a plain
populated matview (no object_reference installed): full success, OID
and relispopulated unchanged.
Also rewrites the document to cut investigation-log narration ("I
confirmed/verified/ran X") in favor of stated facts with citations,
removes redundant "installed code matches the file" confirmations,
and cuts ~350 lines of content duplicated verbatim across sections
(the object/_object_oid/_sanity/view definitions re-quoted in the
getsert section, and the event-trigger bodies re-quoted in scenario
(c), both already given in full earlier in the document).
|
Claude finished @jnasbyupgrade's task in 2m 18s —— View job Claude finished @jnasbyupgrade's taskTask list
SummaryThis round only adds one new commit, The correction is a real, substantive improvement, and it checks out. The old text claimed the The concision rewrite didn't break anything I could find. I checked every forward/backward cross-reference the rewrite introduced or left behind (e.g. "presented in full in 'The core model' above," "quoted in full just below" for the Minor nit (pre-existing, not introduced by this commit — optional polish)There's a recurring off-by-one in a couple of
None of this affects the document's conclusions — it's the same class of citation-precision slip flagged and fixed in the previous review round, just in spots that weren't caught then. Not blocking. No other issues found. Ready to merge as far as documentation accuracy goes. |
- "242-269" for the two views -> "242-270" (_object_v__for_update ends at line 270, not 269); "1168-1201" for the object__getsert wrappers -> "1168-1203" (second overload ends at 1203). Checked the review's third suggestion (1168-1189/1190-1203 should be 1167-1188/1189-1202) directly against source: it's wrong, left unchanged. - Narrowed a scenario (b) citation that pointed at both views' combined range when it meant _object_v alone (242-255). - Cut two asides explaining that a view and function can share a name because they occupy separate Postgres catalogs -- basic knowledge for this doc's audience, not worth stating.
|
Claude finished @jnasbyupgrade's task in 1m 31s —— View job Claude finished @jnasbyupgrade's taskTask list
SummaryThis round adds one commit, Both citation corrections are accurate. I re-derived the real line numbers directly from
One new nit from this commit's trims: line 934 now reads This doesn't affect any substantive conclusion — it's the same class of citation-precision slip caught and fixed in earlier rounds, just introduced by this round's own edit. Not blocking; optional polish before merge. |
"see \"Write/repair paths: getsert\" above" pointed at a section title that doesn't exist in the document. Points at the actual section (the self-heal engine walkthrough, §1a) instead.
|
Claude finished @jnasbyupgrade's task in 59s —— View job Claude finished @jnasbyupgrade's taskTask list
SummaryThis round adds one commit, However, the fix introduces a new, unbalanced-parenthesis error at line 934. The sentence reads:
Counting parens in this clause: the outer This is purely a prose/formatting nit (unbalanced punctuation, not a factual error — the cross-reference itself now points at the right section) and doesn't affect the document's substantive accuracy. Everything else re-verified from prior rounds still holds: the three headline bug claims, the corrected Not blocking, but worth a quick one-line fix before merge. |
|
Claude finished @jnasbyupgrade's task in 41s —— View job Claude finished @jnasbyupgrade's task Claude finished @jnasbyupgrade's taskTask list
SummaryThis round adds one commit, Confirmed fixed. The sentence now reads:
Instead of adding a second closing paren (the fix I suggested), the commit removed the inner parens around No other changes in this commit, and no new issues introduced. CI is green ( All substantive conclusions from prior rounds still hold: the three headline bug claims ( Ready to merge. |
The document previously opened with unlabeled summary prose directly above ~2500 lines of code walkthrough, with nothing marking it as the place to stop reading if you just want the design. Adds an explicit "## Overview" heading, expands the summary to also cover the getsert get-or-create/self-heal mechanism (not previously mentioned at the overview level), and adds a closing line stating plainly that everything after it is supporting reference material, not required reading.
|
Claude finished @jnasbyupgrade's task in 1m 41s —— View job Claude finished @jnasbyupgrade's taskTask list
SummaryThis round adds one commit, Every claim restated in the new Overview checks out against source:
No new inaccuracies, and no regressions from earlier rounds. The heading structure is unaffected — subsection numbering ( No issues found. Ready to merge. |
Ground-truth reference for how
object_reference's object-identity tracking and OID-repair/self-healing logic behaves today onmaster: the core model (object/_object_oidtables,_object_v/_object_v__for_updateviews,_sanity()), every write/repair path in full (object__getsert,_object_oid__add,fix_refs,post_restore,_repair/_sentry_mv, the three event triggers), exhaustive config-dump marking, and three end-to-end scenarios traced with real reproductions in scratch databases: logicalpg_dump/pg_restore, a binarypg_upgrade(PG12→PG17), and a stale_object_oidrow followed byALTER ... RENAME.Also independently confirms, with reproduction, the three known-bug claims referenced in #24:
_object_oid__add()'s missingON CONFLICT,fix_refs()'sr_object/r_object_vtypo, and_etg_fix_identity()'s lack of any staleness guard.Documentation only, describing current behavior — no design proposals. The design question of how/whether to auto-detect and repair after a
pg_upgraderemains tracked separately in #24/#25.Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com