Skip to content

Bump gson from 2.8.7 to 2.8.8 - #12

Merged
lvca merged 1 commit into
mainfrom
dependabot/maven/com.google.code.gson-gson-2.8.8
Aug 23, 2021
Merged

Bump gson from 2.8.7 to 2.8.8#12
lvca merged 1 commit into
mainfrom
dependabot/maven/com.google.code.gson-gson-2.8.8

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 23, 2021

Copy link
Copy Markdown
Contributor

Bumps gson from 2.8.7 to 2.8.8.

Release notes

Sourced from gson's releases.

Gson 2.8.8

  • Fixed issue with recursive types (#1390).
  • Better behaviour with Java 9+ and Unsafe if there is a security manager (#1712).
  • EnumTypeAdapter now works better when ProGuard has obfuscated enum fields (#1495).
Changelog

Sourced from gson's changelog.

Version 2.8.8

  • Fixed issue with recursive types (#1390).
  • Better behaviour with Java 9+ and Unsafe if there is a security manager (#1712).
  • EnumTypeAdapter now works better when ProGuard has obfuscated enum fields (#1495).
Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [gson](https://github.com/google/gson) from 2.8.7 to 2.8.8.
- [Release notes](https://github.com/google/gson/releases)
- [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md)
- [Commits](google/gson@gson-parent-2.8.7...gson-parent-2.8.8)

---
updated-dependencies:
- dependency-name: com.google.code.gson:gson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file java labels Aug 23, 2021
@lvca
lvca merged commit 6d9e3fe into main Aug 23, 2021
@lvca lvca self-assigned this Aug 23, 2021
@dependabot
dependabot Bot deleted the dependabot/maven/com.google.code.gson-gson-2.8.8 branch August 23, 2021 04:54
@claude claude Bot mentioned this pull request Feb 18, 2026
tae898 pushed a commit to humemai/arcadedb-embedded-python that referenced this pull request Jun 28, 2026
….google.code.gson-gson-2.8.8

Bump gson from 2.8.7 to 2.8.8
lvca added a commit that referenced this pull request Aug 1, 2026
…med records only

CHECK DATABASE could be narrowed to a TYPE or a BUCKET, but not to a record. That is the sharp edge
of the strict vertex delete merged in #5707: a genuinely broken edge chain makes its vertex
undeletable until CHECK DATABASE ... FIX rebuilds the adjacency from the surviving edge records, and
the smallest way to ask for that repair was two full passes over the whole vertex type.

  CHECK DATABASE RECORD #12:3 FIX
  CHECK DATABASE RECORD #12:3, #12:9 FIX

The per-record work and the fix are identical to the type-wide run, including the edge-list rebuild;
only the enumeration changes. Combines with FIX and COMPRESS. Rejected when combined with TYPE or
BUCKET - RECORD is already the narrowest scope, so letting one silently win would run a check nobody
asked for and an intersection would be a third semantics nobody asked for. The database-wide passes
(buckets, external properties, indexes) and the orphaned-segment reclaim are skipped, since none can
be narrowed to a record.

Two costs it deliberately does not bound, documented rather than glossed: rebuilding an adjacency
needs every surviving edge that points at the vertex and no index maps endpoints back to edges, so
the scoped run saves the vertex passes but still scans the edge types; and a listed record that
turns out to be corrupted still has every index on its bucket rebuilt.

Also fixes a vacuously-passing assertion in Issue5670EdgeDeleteDanglingBackRefTest: it asserted
totalErrors == 0, and check database reports no such field, so the null-tolerant reader turned it
into 0 == 0 on every run whatever the check found. It now asserts on autoFix, invalidLinks,
totalWarnings and totalCorruptedRecords, and fails loudly on a field that does not exist.
lvca added a commit that referenced this pull request Aug 2, 2026
…med records only (#5710)

* feat(engine) #5680: CHECK DATABASE RECORD <rid> checks and repairs named records only

CHECK DATABASE could be narrowed to a TYPE or a BUCKET, but not to a record. That is the sharp edge
of the strict vertex delete merged in #5707: a genuinely broken edge chain makes its vertex
undeletable until CHECK DATABASE ... FIX rebuilds the adjacency from the surviving edge records, and
the smallest way to ask for that repair was two full passes over the whole vertex type.

  CHECK DATABASE RECORD #12:3 FIX
  CHECK DATABASE RECORD #12:3, #12:9 FIX

The per-record work and the fix are identical to the type-wide run, including the edge-list rebuild;
only the enumeration changes. Combines with FIX and COMPRESS. Rejected when combined with TYPE or
BUCKET - RECORD is already the narrowest scope, so letting one silently win would run a check nobody
asked for and an intersection would be a third semantics nobody asked for. The database-wide passes
(buckets, external properties, indexes) and the orphaned-segment reclaim are skipped, since none can
be narrowed to a record.

Two costs it deliberately does not bound, documented rather than glossed: rebuilding an adjacency
needs every surviving edge that points at the vertex and no index maps endpoints back to edges, so
the scoped run saves the vertex passes but still scans the edge types; and a listed record that
turns out to be corrupted still has every index on its bucket rebuilt.

Also fixes a vacuously-passing assertion in Issue5670EdgeDeleteDanglingBackRefTest: it asserted
totalErrors == 0, and check database reports no such field, so the null-tolerant reader turned it
into 0 == 0 on every run whatever the check found. It now asserts on autoFix, invalidLinks,
totalWarnings and totalCorruptedRecords, and fails loudly on a field that does not exist.

* style(engine) #5680: strip trailing whitespace flagged by pre-commit

The setup job failed on a trailing-whitespace line an earlier edit left after a comment in the
RECORD-scoped edge branch. Removed, along with the stray blank line beside it.

* fix(engine) #5680: a missing RID is not corruption, and the scoped progress step stops double-counting

Two independent review passes on the RECORD scope, four actionable points between them.

- A listed RID that simply is not there was recorded through addCorrupted, which puts its BUCKET
  into affectedBuckets - so CHECK DATABASE RECORD ... FIX dropped and rebuilt every index on that
  bucket, a full bucket scan, over what is usually a mistyped or already-deleted RID. That is
  exactly the cost the scope exists to avoid, and the scope is meant to be hand-typed after a failed
  delete. RecordNotFoundException is now reported and never flagged corrupted, in all three arms
  (vertex, edge, document). Mutation-checked: restoring addCorrupted fails the new test with
  totalCorruptedRecords=1, autoFix=1.
- checkScopedRecords bumped currentStep for every group, but the document arm reaches stepBegin,
  which bumps it again - so a scope containing a plain document reported "step 3 of 2" against a
  totalSteps budgeted at one step per group. Each arm now owns its bump; the graph arms need it
  because they pass a fixed value into the nested GraphDatabaseChecker instead.
- setRecords and the statement's stream now drop null RIDs. Rid.toRecordId can answer null for a
  non-literal form, and groupRecordsByType would meet it as an NPE on getBucketId(). Not reachable
  through the RECORD #n:n literal grammar, but setRecords(Set<RID>) is public API.
- The parser test's cross-reference named a test class that no longer exists after the rescope.

Tests: four added for the branches that were unexercised - an edge-typed RID, a document-typed RID
(the branch the progress bug lived in), several RIDs spanning different types in one command, and a
missing-but-valid RID under FIX, which pins the first item above.

* fix(engine) #5680: a RECORD scope that resolves to nothing is refused, not widened to the whole database

Review round on the rescoped PR: LGTM with three minor points, two taken.

- CHECK DATABASE RECORD whose RIDs all resolve to null left the checker with an empty scope, which
  reads as "no scope" - so a command that explicitly named records quietly ran a FULL database
  check. The review judged this unreachable from SQL; it is not. Only the `#n:n` literal always
  resolves, while the non-literal {"@Rid": <expression>} form goes through an expression that can
  answer null, so `CHECK DATABASE RECORD {"@Rid": null}` reached it. Refused now, with a test that
  fails when the guard is stubbed out.
- A warning dropped for exceeding maxWarnings was discarded silently in the two scoped arms, where
  GraphDatabaseChecker.addWarning logs it. Extracted addScopedWarning so both behave the same:
  always counted, retained under the cap, logged when dropped.

Not taken: extracting the duplicated RecordNotFoundException/Exception catch blocks in the scoped
vertex and edge arms. They would need six accumulators threaded through a shared helper, which reads
worse than the duplication, and the surrounding type-wide methods already parallel each other the
same way - the review noted as much in raising it.

* fix(engine) #5680: the empty-scope guard moves into setRecords, so it protects the public API too

Review round: LGTM once the setRecords widening note was considered. Went one step further than the
note it asked for.

The guard against "a RECORD scope that resolves to nothing silently becomes a full database check"
lived only in the SQL layer, so an embedded caller reaching DatabaseChecker.setRecords directly
still hit the widening. The review reasoned that setRecords cannot tell "named records, none
usable" from "named no records" - true only because the SQL layer filtered the nulls out BEFORE
calling it. It no longer does: the nulls are passed through, setRecords owns both the filtering and
the refusal, and one guard now covers both entry points. A genuinely empty (or null) set still means
"no scope" and is accepted. Both are asserted.

Also: the document arm said "cannot be loaded, removing it", but nothing removes the record there -
corruptedRecords only drives the index rebuild. The review called the wording inherited and asked
for no action; it is new code here, so it now says what is true, with a note on why it diverges from
the type-wide checkDocuments (which also calls a document a "vertex").

Adds the warning-cap test the review asked for: 40 bogus RIDs against maxWarnings=10 retains 10
messages and still counts 40.

Not added: an execution test for RECORD ... FIX COMPRESS. The compress pass is shared, unscoped code
already covered elsewhere, and routing it through the scoped enumeration exercises no new branch.

* docs(engine) #5680: state the COMPRESS caveat, and pin the corrupted-record fix cost with a test

Review approved with three non-blocking notes; two taken.

- COMPRESS is unaffected by the RECORD scope and still compresses the whole database. It is opt-in,
  but it is the one clause that breaks the "naming a record bounds the cost" promise, so it now sits
  in the release notes beside the other two costs the scope does not bound.
- Added the test the review asked for: a listed record that is GENUINELY corrupted - not merely
  missing, not merely chain-broken - is flagged, and under FIX every index on its bucket is dropped
  and rebuilt. That turns the "RECORD bounds the check, not necessarily the fix" paragraph into an
  executable assertion, so a future change cannot quietly make a scoped repair either cheaper or
  more destructive than documented. Mutation-checked: dropping addCorrupted from the scoped arm
  fails it, and the injected corruption is the intended shape (buffer truncated to 8 bytes against
  the 25-byte vertex prefix), distinct from the missing-RID path.

Not taken: moving the RECORD-plus-TYPE/BUCKET rejection from check() into the setters. setTypes and
setRecords can be called in either order, so a setter-level guard would fire or not depending on
call order; check() is the only place that sees the whole configuration. The review called the
current placement acceptable.

* fix(engine) #5680: a dropped RID is reported, the no-type step is named, and a comment stops overselling

Review round: approve, all notes minor. Three taken.

- The "Exception, not Throwable" comment claimed more protection than the code gives. It guards the
  LOOKUP, but the shared per-record consumer still catches Throwable around the connectivity check
  itself - matching the type-wide path, which is why it stays. The comment now says exactly what is
  and is not covered rather than implying an Error can never be recorded as corruption.
- setRecords refused an all-null scope but dropped a PARTIAL one silently, so a caller who mistyped
  one of several RIDs got a clean report for a check that skipped it. Narrowing is still allowed -
  unlike widening it cannot do more than asked - but it now surfaces a warning naming how many were
  dropped, with a test.
- The no-type group advanced currentStep without ever naming the step, so a progress poller watched
  it go by blank. Routed through stepBegin like the document arm, which also owns the bump.

Not taken:

- Rejecting RECORD together with COMPRESS for symmetry with the TYPE/BUCKET rejection. The two are
  not the same case: RECORD plus TYPE/BUCKET has no coherent meaning, whereas "check this record,
  then compress the database" is perfectly meaningful - it is just not cheap. That is a
  documentation problem, and the release note now states it.
- @tag("slow") on the 200-edge tests. Measured rather than assumed: the whole class runs in 0.53s,
  and CLAUDE.md's criteria are multi-second elapsed or large batches. 200 tiny transactions under a
  second is neither.

* fix(engine) #5680: diagnose the clause conflict first, warn that COMPRESS is unscoped

Review round: refinements, not blockers. Four taken.

- CHECK DATABASE TYPE Hub RECORD {"@Rid": null} reported "none of them resolves to a RID", because
  the RIDs are resolved before check() reaches the combination guard - pointing the operator at the
  inner failure while the actual mistake is the clause combination. The statement now diagnoses the
  combination before resolving anything; check() keeps its own guard for programmatic callers.
- setRecords left droppedRecords stale on its early-return path. Harmless today, since the warning
  is only emitted under a record scope, but the field is public-API-visible state and should not
  depend on call order.
- COMPRESS now warns that it is not limited by the RECORD scope. The review suggested this as a
  middle ground between refusing the combination and staying silent, and it is a better answer than
  the documentation-only one: the command still does what it was asked, but an operator who named a
  record and expected a bounded run is told otherwise. Tested both ways, so the warning tracks the
  clause rather than the scope.
- Recorded, not fixed: the type-wide checkDocuments adds to the warnings/corrupted sets without
  incrementing the corresponding totals, so a corrupt document reports different totals depending on
  which path found it. The scoped arm here is the correct one; aligning the type-wide path is a
  behaviour change to a command this issue does not otherwise touch.

Agreed with the review that the duplicated catch blocks read better than threading six accumulators
through a shared helper; no change.

* fix(engine) #5680: one owner for the conflict message, no counts a Set cannot know, bounded corrupted set

Review round: nothing blocking. All four points taken.

- The "cannot be combined with TYPE or BUCKET" text was written out in both the statement and the
  checker. The two-layer guard stays - the statement has to diagnose the clause conflict before the
  RIDs are resolved - but the wording now lives in one constant so the two cannot drift.
- Two messages quoted a record count the Set could not know: several RID expressions that all
  resolve to null collapse to a single null element, so "given 3 record(s)" was never reachable and
  "1 of the record(s) did not resolve" under-reported. Rather than plumb the original count through,
  both messages stop quoting a number, which is accurate whatever the input.
- checkScopedDocuments grew corruptedRecords without a bound while every other path honours
  maxCorrupted/maxWarnings. Bounded the same way, with the total still counting every occurrence.
- Documented that the edge sweep a rebuild needs runs once per distinct vertex TYPE named, not once
  per run: ten vertices of one type cost one sweep, one vertex of each of three types cost three.
robfrank pushed a commit that referenced this pull request Aug 14, 2026
…med records only (#5710)

* feat(engine) #5680: CHECK DATABASE RECORD <rid> checks and repairs named records only

CHECK DATABASE could be narrowed to a TYPE or a BUCKET, but not to a record. That is the sharp edge
of the strict vertex delete merged in #5707: a genuinely broken edge chain makes its vertex
undeletable until CHECK DATABASE ... FIX rebuilds the adjacency from the surviving edge records, and
the smallest way to ask for that repair was two full passes over the whole vertex type.

  CHECK DATABASE RECORD #12:3 FIX
  CHECK DATABASE RECORD #12:3, #12:9 FIX

The per-record work and the fix are identical to the type-wide run, including the edge-list rebuild;
only the enumeration changes. Combines with FIX and COMPRESS. Rejected when combined with TYPE or
BUCKET - RECORD is already the narrowest scope, so letting one silently win would run a check nobody
asked for and an intersection would be a third semantics nobody asked for. The database-wide passes
(buckets, external properties, indexes) and the orphaned-segment reclaim are skipped, since none can
be narrowed to a record.

Two costs it deliberately does not bound, documented rather than glossed: rebuilding an adjacency
needs every surviving edge that points at the vertex and no index maps endpoints back to edges, so
the scoped run saves the vertex passes but still scans the edge types; and a listed record that
turns out to be corrupted still has every index on its bucket rebuilt.

Also fixes a vacuously-passing assertion in Issue5670EdgeDeleteDanglingBackRefTest: it asserted
totalErrors == 0, and check database reports no such field, so the null-tolerant reader turned it
into 0 == 0 on every run whatever the check found. It now asserts on autoFix, invalidLinks,
totalWarnings and totalCorruptedRecords, and fails loudly on a field that does not exist.

* style(engine) #5680: strip trailing whitespace flagged by pre-commit

The setup job failed on a trailing-whitespace line an earlier edit left after a comment in the
RECORD-scoped edge branch. Removed, along with the stray blank line beside it.

* fix(engine) #5680: a missing RID is not corruption, and the scoped progress step stops double-counting

Two independent review passes on the RECORD scope, four actionable points between them.

- A listed RID that simply is not there was recorded through addCorrupted, which puts its BUCKET
  into affectedBuckets - so CHECK DATABASE RECORD ... FIX dropped and rebuilt every index on that
  bucket, a full bucket scan, over what is usually a mistyped or already-deleted RID. That is
  exactly the cost the scope exists to avoid, and the scope is meant to be hand-typed after a failed
  delete. RecordNotFoundException is now reported and never flagged corrupted, in all three arms
  (vertex, edge, document). Mutation-checked: restoring addCorrupted fails the new test with
  totalCorruptedRecords=1, autoFix=1.
- checkScopedRecords bumped currentStep for every group, but the document arm reaches stepBegin,
  which bumps it again - so a scope containing a plain document reported "step 3 of 2" against a
  totalSteps budgeted at one step per group. Each arm now owns its bump; the graph arms need it
  because they pass a fixed value into the nested GraphDatabaseChecker instead.
- setRecords and the statement's stream now drop null RIDs. Rid.toRecordId can answer null for a
  non-literal form, and groupRecordsByType would meet it as an NPE on getBucketId(). Not reachable
  through the RECORD #n:n literal grammar, but setRecords(Set<RID>) is public API.
- The parser test's cross-reference named a test class that no longer exists after the rescope.

Tests: four added for the branches that were unexercised - an edge-typed RID, a document-typed RID
(the branch the progress bug lived in), several RIDs spanning different types in one command, and a
missing-but-valid RID under FIX, which pins the first item above.

* fix(engine) #5680: a RECORD scope that resolves to nothing is refused, not widened to the whole database

Review round on the rescoped PR: LGTM with three minor points, two taken.

- CHECK DATABASE RECORD whose RIDs all resolve to null left the checker with an empty scope, which
  reads as "no scope" - so a command that explicitly named records quietly ran a FULL database
  check. The review judged this unreachable from SQL; it is not. Only the `#n:n` literal always
  resolves, while the non-literal {"@Rid": <expression>} form goes through an expression that can
  answer null, so `CHECK DATABASE RECORD {"@Rid": null}` reached it. Refused now, with a test that
  fails when the guard is stubbed out.
- A warning dropped for exceeding maxWarnings was discarded silently in the two scoped arms, where
  GraphDatabaseChecker.addWarning logs it. Extracted addScopedWarning so both behave the same:
  always counted, retained under the cap, logged when dropped.

Not taken: extracting the duplicated RecordNotFoundException/Exception catch blocks in the scoped
vertex and edge arms. They would need six accumulators threaded through a shared helper, which reads
worse than the duplication, and the surrounding type-wide methods already parallel each other the
same way - the review noted as much in raising it.

* fix(engine) #5680: the empty-scope guard moves into setRecords, so it protects the public API too

Review round: LGTM once the setRecords widening note was considered. Went one step further than the
note it asked for.

The guard against "a RECORD scope that resolves to nothing silently becomes a full database check"
lived only in the SQL layer, so an embedded caller reaching DatabaseChecker.setRecords directly
still hit the widening. The review reasoned that setRecords cannot tell "named records, none
usable" from "named no records" - true only because the SQL layer filtered the nulls out BEFORE
calling it. It no longer does: the nulls are passed through, setRecords owns both the filtering and
the refusal, and one guard now covers both entry points. A genuinely empty (or null) set still means
"no scope" and is accepted. Both are asserted.

Also: the document arm said "cannot be loaded, removing it", but nothing removes the record there -
corruptedRecords only drives the index rebuild. The review called the wording inherited and asked
for no action; it is new code here, so it now says what is true, with a note on why it diverges from
the type-wide checkDocuments (which also calls a document a "vertex").

Adds the warning-cap test the review asked for: 40 bogus RIDs against maxWarnings=10 retains 10
messages and still counts 40.

Not added: an execution test for RECORD ... FIX COMPRESS. The compress pass is shared, unscoped code
already covered elsewhere, and routing it through the scoped enumeration exercises no new branch.

* docs(engine) #5680: state the COMPRESS caveat, and pin the corrupted-record fix cost with a test

Review approved with three non-blocking notes; two taken.

- COMPRESS is unaffected by the RECORD scope and still compresses the whole database. It is opt-in,
  but it is the one clause that breaks the "naming a record bounds the cost" promise, so it now sits
  in the release notes beside the other two costs the scope does not bound.
- Added the test the review asked for: a listed record that is GENUINELY corrupted - not merely
  missing, not merely chain-broken - is flagged, and under FIX every index on its bucket is dropped
  and rebuilt. That turns the "RECORD bounds the check, not necessarily the fix" paragraph into an
  executable assertion, so a future change cannot quietly make a scoped repair either cheaper or
  more destructive than documented. Mutation-checked: dropping addCorrupted from the scoped arm
  fails it, and the injected corruption is the intended shape (buffer truncated to 8 bytes against
  the 25-byte vertex prefix), distinct from the missing-RID path.

Not taken: moving the RECORD-plus-TYPE/BUCKET rejection from check() into the setters. setTypes and
setRecords can be called in either order, so a setter-level guard would fire or not depending on
call order; check() is the only place that sees the whole configuration. The review called the
current placement acceptable.

* fix(engine) #5680: a dropped RID is reported, the no-type step is named, and a comment stops overselling

Review round: approve, all notes minor. Three taken.

- The "Exception, not Throwable" comment claimed more protection than the code gives. It guards the
  LOOKUP, but the shared per-record consumer still catches Throwable around the connectivity check
  itself - matching the type-wide path, which is why it stays. The comment now says exactly what is
  and is not covered rather than implying an Error can never be recorded as corruption.
- setRecords refused an all-null scope but dropped a PARTIAL one silently, so a caller who mistyped
  one of several RIDs got a clean report for a check that skipped it. Narrowing is still allowed -
  unlike widening it cannot do more than asked - but it now surfaces a warning naming how many were
  dropped, with a test.
- The no-type group advanced currentStep without ever naming the step, so a progress poller watched
  it go by blank. Routed through stepBegin like the document arm, which also owns the bump.

Not taken:

- Rejecting RECORD together with COMPRESS for symmetry with the TYPE/BUCKET rejection. The two are
  not the same case: RECORD plus TYPE/BUCKET has no coherent meaning, whereas "check this record,
  then compress the database" is perfectly meaningful - it is just not cheap. That is a
  documentation problem, and the release note now states it.
- @tag("slow") on the 200-edge tests. Measured rather than assumed: the whole class runs in 0.53s,
  and CLAUDE.md's criteria are multi-second elapsed or large batches. 200 tiny transactions under a
  second is neither.

* fix(engine) #5680: diagnose the clause conflict first, warn that COMPRESS is unscoped

Review round: refinements, not blockers. Four taken.

- CHECK DATABASE TYPE Hub RECORD {"@Rid": null} reported "none of them resolves to a RID", because
  the RIDs are resolved before check() reaches the combination guard - pointing the operator at the
  inner failure while the actual mistake is the clause combination. The statement now diagnoses the
  combination before resolving anything; check() keeps its own guard for programmatic callers.
- setRecords left droppedRecords stale on its early-return path. Harmless today, since the warning
  is only emitted under a record scope, but the field is public-API-visible state and should not
  depend on call order.
- COMPRESS now warns that it is not limited by the RECORD scope. The review suggested this as a
  middle ground between refusing the combination and staying silent, and it is a better answer than
  the documentation-only one: the command still does what it was asked, but an operator who named a
  record and expected a bounded run is told otherwise. Tested both ways, so the warning tracks the
  clause rather than the scope.
- Recorded, not fixed: the type-wide checkDocuments adds to the warnings/corrupted sets without
  incrementing the corresponding totals, so a corrupt document reports different totals depending on
  which path found it. The scoped arm here is the correct one; aligning the type-wide path is a
  behaviour change to a command this issue does not otherwise touch.

Agreed with the review that the duplicated catch blocks read better than threading six accumulators
through a shared helper; no change.

* fix(engine) #5680: one owner for the conflict message, no counts a Set cannot know, bounded corrupted set

Review round: nothing blocking. All four points taken.

- The "cannot be combined with TYPE or BUCKET" text was written out in both the statement and the
  checker. The two-layer guard stays - the statement has to diagnose the clause conflict before the
  RIDs are resolved - but the wording now lives in one constant so the two cannot drift.
- Two messages quoted a record count the Set could not know: several RID expressions that all
  resolve to null collapse to a single null element, so "given 3 record(s)" was never reachable and
  "1 of the record(s) did not resolve" under-reported. Rather than plumb the original count through,
  both messages stop quoting a number, which is accurate whatever the input.
- checkScopedDocuments grew corruptedRecords without a bound while every other path honours
  maxCorrupted/maxWarnings. Bounded the same way, with the total still counting every occurrence.
- Documented that the edge sweep a rebuild needs runs once per distinct vertex TYPE named, not once
  per run: ten vertices of one type cost one sweep, one vertex of each of three types cost three.

(cherry picked from commit 56b47f4)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant