Skip to content

ci: unblock Oracle in compat matrix and fix Lucee 6 datasource#2683

Merged
bpamiri merged 4 commits into
developfrom
peter/fix-2663-oracle-ci
May 14, 2026
Merged

ci: unblock Oracle in compat matrix and fix Lucee 6 datasource#2683
bpamiri merged 4 commits into
developfrom
peter/fix-2663-oracle-ci

Conversation

@bpamiri
Copy link
Copy Markdown
Collaborator

@bpamiri bpamiri commented May 14, 2026

Summary

Two of the three sub-clusters from #2663. Sub-cluster 2 (lockingSpec guard) already landed on develop via #2670 — its $supportsAdvisoryLocks() capability supersedes the manual skip list this PR originally proposed, and that change has been dropped on rebase.

  1. Lucee 6 datasource registration — Switch dbdriver from "Oracle" to "Other" in tools/docker/lucee6/CFConfig.json. The Lucee Oracle extension was re-templating the JDBC URL and emitting java.sql.SQLException: Invalid Oracle URL specified. Adobe 2023/2025 and BoxLang already use "Other" and work fine; this is the minimum diff between the working configs and Lucee 6.

    Lucee 7 retains "dbdriver": "Oracle" — its Oracle extension does not re-template the JDBC URL, so it connects successfully with the current config. The Invalid Oracle URL specified failure in the compat matrix is Lucee-6-only (per the issue's CI evidence). Leaving Lucee 7 alone avoids risking a regression on a path that works today.

  2. SOFT_FAIL_DBS="oracle" — Set once before the per-database loop and read inside it. Oracle's remaining constraint-cleanup failures (ORA-02264 / ORA-01003 in migratorSpec / bulkOperationsSpec) now log as warnings instead of breaking each engine job while a follow-up addresses the teardown drift.

CLAUDE.md's SOFT_FAIL_DBS section is updated to reflect the new state.

Out of scope (follow-up)

Sub-cluster 3 from the issue — Oracle ORA-02264 constraint cleanup in migratorSpec / bulkOperationsSpec — needs the same shape of fix as #2664's MySQL/H2/SQL Server FK collision work. Leaving it for a separate PR keeps each change reviewable on its own.

Test plan

  • bash tools/test-local.sh model — 815 pass on Lucee 7 + SQLite (verified pre-rebase)
  • Trigger compat-matrix on this branch — Lucee 6 + Oracle should now register the datasource and run specs; remaining Oracle failures log as warnings rather than breaking the engine job
  • Confirm CLAUDE.md SOFT_FAIL_DBS line-number references match the merged state

Refs: #2649 (rollup), #2670 (lockingSpec already merged), #2664 (FK constraint cleanup, related shape)

🤖 Generated with Claude Code

Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

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

Wheels Bot — Reviewer A

TL;DR: This is a tight CI infrastructure PR fixing two independent Oracle problems: Lucee 6 datasource registration (wrong dbdriver value) and Oracle soft-failing in the compat matrix while sub-cluster 3 is addressed in a follow-up. The diff is correct and proportionate. I am posting as comment rather than request-changes because all findings are minor — no correctness, cross-engine, or security issues apply to CI-infra-only changes of this shape.


Correctness

Lucee 7 still uses "dbdriver": "Oracle" — worth one sentence of explanation.

tools/docker/lucee7/CFConfig.json:148

The fix switches Lucee 6 to "Other" because Lucee 6's Oracle extension re-templates the JDBC URL. Lucee 7 keeps "Oracle" and apparently works. The reasoning is clear from issue #2663 (sub-cluster 1 is Lucee-6-only per the CI evidence), but neither the commit message nor the PR body states why Lucee 7 is exempt. A one-line comment in CFConfig.json or a sentence in the commit body would prevent the next person from asking the same question and applying the same fix to Lucee 7 unnecessarily.

Suggested addition to PR description:

Lucee 7 retains "dbdriver": "Oracle" — its Oracle extension does not re-template the JDBC URL, so it connects successfully with the current config. Only Lucee 6 exhibited the Invalid Oracle URL specified failure.

Matrix run is unchecked in the test plan.

The primary claim of this PR — that dbdriver: "Other" allows Lucee 6 to register the Oracle datasource — cannot be verified without a real Oracle matrix run. The [ ] Trigger compat-matrix on this branch checkbox is intentionally left open. The evidence that "Other" is correct (Adobe 2023/2025 and BoxLang configs use "Other" and connect successfully) is reasonable indirect justification, but confirming that checkbox before merge would close the loop if Oracle infra is available.


Conventions

SOFT_FAIL_DBS is assigned inside the per-database loop at line 422 but outside the loop at line 470.

At line 422, SOFT_FAIL_DBS="oracle" sits inside the for db in "${DBS[@]}" loop that runs from line 285 to 446 — it is reassigned on every database iteration. At line 470 the same variable is set once before the loop, which is the cleaner pattern. Both are functionally correct since the value is constant, but the inconsistency is worth cleaning up: move the line-422 assignment to just before the for db in at line 285 to match line-470 style.


Docs

PR title is stale.

The PR title reads: ci: unblock Oracle in compat matrix and guard advisory-lock spec

The PR body explicitly says the advisory-lock guard (sub-cluster 2, already landed via #2670) has been dropped from this PR. The commit message correctly says fix Lucee 6 datasource. If this squash-merges, the merge commit will use the PR title and will be misleading. Suggest updating to:

ci: unblock Oracle in compat matrix and fix Lucee 6 datasource

CLAUDE.md ~ line numbers are a good call.

Previously the doc cited exact lines 389 and 519. Switching to ~421, ~469 (actual: 422 and 470) is more honest and less likely to rot. The one-line-off approximation is fine under the tilde.


Commits

Single commit, conforming to commitlint:

  • Type: ci
  • Subject within 100 chars ✓
  • Not ALL-CAPS ✓
  • Body explains the "why" clearly ✓

Note: (#2663) in the subject references the issue, not the PR (#2683). Not a rule violation, just worth being aware of if the project convention is PR-number references.

bpamiri added a commit that referenced this pull request May 14, 2026
Match the pattern already used in the summary step (line 470) where
SOFT_FAIL_DBS is set once before the loop. The previous placement
reassigned the same constant on every database iteration. Same value,
cleaner scope. Per PR #2683 review feedback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bpamiri bpamiri changed the title ci: unblock Oracle in compat matrix and guard advisory-lock spec ci: unblock Oracle in compat matrix and fix Lucee 6 datasource May 14, 2026
@bpamiri
Copy link
Copy Markdown
Collaborator Author

bpamiri commented May 14, 2026

Thanks for the review. Addressed:

  1. Lucee 7 rationale — Added a paragraph to the PR description explaining why Lucee 7 stays on "dbdriver": "Oracle" (its extension does not re-template, the failure is Lucee-6-only per the issue's CI evidence, and changing a working path would risk a regression). Did not add a comment to CFConfig.json because JSON does not support comments — the PR body is the durable home for that context.

  2. SOFT_FAIL_DBS placement — Hoisted the assignment out of the per-database loop in f845ffa1c. Now matches the summary-step pattern (single assignment before the loop).

  3. Stale PR title — Updated to ci: unblock Oracle in compat matrix and fix Lucee 6 datasource to match the rebased scope.

  4. Matrix run unchecked — Left intentionally — I do not have an Oracle matrix run on hand locally and the indirect evidence (Adobe + BoxLang use "Other" and connect) is what I have. Happy to trigger the workflow once this is in a mergeable state, or a maintainer can do so on merge.

  5. (#2663) references the issue, not the PR — Acknowledged; left as-is since the issue reference is the more useful pointer for the commit-log reader.

Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

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

Wheels Bot — Reviewer A

TL;DR: This follow-up commit correctly addresses the previous review's finding — SOFT_FAIL_DBS is now set once before the per-database loop at line 275 with a clear comment, rather than being reassigned on every iteration. The diff is proportionate and the hoist is functionally correct. I am requesting changes for two issues: both commits are missing the required DCO Signed-off-by: trailer (a required CI status check that will block merge), and the CLAUDE.md line reference introduced in the first commit is now stale after the second commit moved the first occurrence from ~421 to 275.


Commits

DCO sign-off missing on both commits.

Both commits in this PR are missing the required Signed-off-by: trailer:

  • 3273b99a5ci: unblock Oracle in compat matrix and fix Lucee 6 datasource (#2663)
  • f845ffa1cci(compat-matrix): hoist SOFT_FAIL_DBS out of per-db loop

Each ends with:

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

but no Signed-off-by: Peter Amiri <peter@alurium.com> trailer. Per CONTRIBUTING.md § DCO:

The DCO GitHub App is a required status check on every PR and will block merges if any commit is missing the trailer.

Fix: add Signed-off-by: to both commits (e.g. amend locally and force-push, or ask a maintainer to apply the trailer on merge if the project permits that).


Docs

CLAUDE.md line reference is stale after the hoist.

CLAUDE.md line 642 (introduced in the first commit) reads:

`SOFT_FAIL_DBS` in `.github/workflows/compat-matrix.yml` (lines ~421, ~469) currently contains `"oracle"`

After the second commit hoisted SOFT_FAIL_DBS from inside the per-db loop to before it, the actual line numbers are now 275 and 470. The ~ approximation cannot bridge a 146-line gap — ~421 will send a reader to the wrong place. Suggest updating to lines ~275, ~470 or, more durably, replacing the line numbers with prose:

`SOFT_FAIL_DBS` appears twice in `.github/workflows/compat-matrix.yml`: once before the per-database test loop, and once before the per-database summary loop.

Minor nit (non-blocking)

Second SOFT_FAIL_DBS assignment at line 470 is now redundant.

Both assignments are in the same run: block, so the variable set at line 275 persists to the summary loop at line 470. The second assignment is harmless and adds a useful "close to the consumer" reminder if the step is ever split. Worth a one-line comment or no change at all.

bpamiri and others added 3 commits May 14, 2026 19:20
Two of the three sub-clusters from #2663 — the third (lockingSpec guard,
#2665) already landed via #2670 on develop, so this rebase drops the
manual hard-coded skip list in favor of the merged
$supportsAdvisoryLocks() capability.

1. Lucee 6 datasource registration: switch dbdriver from "Oracle" to
   "Other" in tools/docker/lucee6/CFConfig.json so the JDBC URL is used
   as-is rather than re-templated by Lucee's Oracle extension. Matches
   the working Adobe 2023/2025 and BoxLang configs.

2. Add oracle to SOFT_FAIL_DBS in compat-matrix.yml so the remaining
   Oracle constraint-cleanup issues (ORA-02264 / ORA-01003) log as
   warnings instead of breaking each engine job while a follow-up
   resolves the migratorSpec / bulkOperationsSpec teardown drift.

Constraint cleanup (sub-cluster 3 in the issue) is left for a separate
PR — shares shape with #2664's MySQL/H2/SQL Server FK collision work.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Peter Amiri <peter@alurium.com>
Match the pattern already used in the summary step (line 470) where
SOFT_FAIL_DBS is set once before the loop. The previous placement
reassigned the same constant on every database iteration. Same value,
cleaner scope. Per PR #2683 review feedback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Peter Amiri <peter@alurium.com>
Line numbers shift when assignments move (as in the previous commit
which hoisted SOFT_FAIL_DBS out of the per-db loop). Replace the
`~421, ~469` references with prose tied to the workflow step names so
the docs stop rotting on every adjacent edit. Per PR #2683 review.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Peter Amiri <peter@alurium.com>
@bpamiri bpamiri force-pushed the peter/fix-2663-oracle-ci branch from f845ffa to 3ae22fa Compare May 14, 2026 23:20
@bpamiri
Copy link
Copy Markdown
Collaborator Author

bpamiri commented May 14, 2026

Addressed both blocking items:

  1. DCO sign-off — All three commits in the branch are now signed off (rebased with git rebase --signoff origin/develop then force-pushed). Verified locally with git log --format='%h %s%n%b'.

  2. Stale CLAUDE.md line refs — Replaced the ~421, ~469 numeric refs with prose tied to the workflow step names ("Run test suites" and "Generate per-engine summary") so the docs stop rotting on adjacent edits. Commit 3ae22fab2.

On the nit (second SOFT_FAIL_DBS= at line 470 supposedly redundant) — left in place. The two assignments live in separate workflow steps (Run test suites at line 260 and Generate per-engine summary at line 462), and shell variables don't persist across step boundaries. Removing the second one would break the summary step's soft-fail classification. The CLAUDE.md update now calls this out explicitly.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 14, 2026

Wheels Bot — Reviewer B (round 1)

A's review is mostly accurate: the DCO finding and the stale CLAUDE.md line-number finding are both legitimate. However, the "minor nit" about the second SOFT_FAIL_DBS assignment being redundant is a false positive that merits correction so the author doesn't act on it and break the summary step.

Sycophancy

None detected. A requested changes and cited specific evidence for each finding.

False positives

  • Second SOFT_FAIL_DBS assignment called "redundant" — A says the variable set at line 275 "persists to the summary loop at line 470" because they are "in the same run: block." They are not in the same run: block. Line 275 is in the Run test suites for all databases step; line 470 is in the Generate per-engine summary step (if: always()). Each GitHub Actions run: is an independent shell process — variables do not persist across steps. The line 470 assignment is required, not redundant. The author should not remove or comment it out.

  • CLAUDE.md ~469 described as a 146-line gap — A says both numbers are off by ~146 lines, but only ~421 is far from the truth (actual: 275). The ~469 reference is one line off from the actual 470 and is close enough to be useful. A's correction to lines ~275, ~470 is right directionally, but the framing overstates how stale ~469 is.

Missed issues

  • CLAUDE.md is already correct at HEAD — A flags CLAUDE.md line 642 as stale, but the diff shows the CLAUDE.md update (lines ~421, ~469lines ~275, ~470 not quite — wait, the diff shows the new text is lines ~421, ~469). Actually: the diff shows the new text introduced by commit 3273b99a5 is (lines ~421, ~469). After the second commit (f845ffa1c) hoisted SOFT_FAIL_DBS from ~421 to 275, the CLAUDE.md text became stale. A's finding is correct — the CLAUDE.md update was accurate for commit 1 but the second commit made it stale again. This is real and was not addressed by bpamiri's response comment (item 5 says (#2663) issue reference was left as-is, but CLAUDE.md line numbers were not mentioned as fixed). The CLAUDE.md still needs updating to lines ~275, ~470.

  • DCO on human-authored commits — A correctly flags the missing Signed-off-by: trailer. The contributor's response (comment 4455508511) does not acknowledge or commit to fixing the DCO issue. This remains open.

Verdict alignment

A's CHANGES_REQUESTED verdict is correct given the real DCO issue and the stale CLAUDE.md line numbers; I agree with it.

Convergence

The DCO and CLAUDE.md findings are real and unresolved. The false-positive "redundant assignment" nit is harmless only because A labelled it non-blocking — the author should be explicitly told not to remove the line 470 assignment. Once (1) both commits are amended or rebased to add Signed-off-by: trailers and (2) CLAUDE.md line 642 is updated to lines ~275, ~470, this PR is ready to merge. Aligned on changes needed.

@bpamiri
Copy link
Copy Markdown
Collaborator Author

bpamiri commented May 14, 2026

Reviewer B — your analysis is correct on all three points (DCO + stale CLAUDE.md were real and unresolved at f845ffa1c; the "redundant assignment" nit was a false positive). Both blocking items are already addressed at the current HEAD (3ae22fab2), pushed shortly before your round-1 review:

  • DCO — All three commits (906172b38, fcc1c653a, 3ae22fab2) now carry Signed-off-by: Peter Amiri <peter@alurium.com> trailers. Achieved via git rebase --signoff origin/develop.
  • CLAUDE.md — Line 642 no longer cites numeric line refs at all; it now describes both occurrences by their workflow step names (Run test suites / Generate per-engine summary) and explicitly notes that the two must be kept in sync because GitHub Actions run: steps don't share shell state. That last clause directly addresses your false-positive concern about A's "redundant" nit — anyone reading CLAUDE.md should now know not to remove the second assignment.

Your timing crossed with my response to A which pushed back on the redundant-assignment nit using the same reasoning you arrived at independently. Convergence confirmed.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 14, 2026

Wheels Bot - Reviewer B (round 1)

A's review is accurate and proportionate. All claims verified. No sycophancy, no false positives, no missed issues found on re-scan. Convergence on the changes A flagged.

Sycophancy: None. A avoids approval and backs correctness claims with specific findings.

False positives: None. Verified all three: Lucee 7 does retain dbdriver Oracle at CFConfig.json:148. SOFT_FAIL_DBS at ~line 422 is inside the for-db loop - the done keyword closes 25 lines later, so A's inconsistency finding is accurate (functionally harmless, style gap real). PR title does retain 'guard advisory-lock spec' which the PR body says was dropped on rebase.

Missed issues: None significant. DCO Signed-off-by trailer is absent from the commit, but the DCO GitHub App check is not installed in this repo's CI (confirmed by inspecting check-runs on the SHA), so not a blocker. No cross-engine CFML concerns apply - changed files are JSON config and a shell workflow.

Verdict alignment: COMMENT is consistent with all findings being style/documentation with no correctness impact.

Convergence: Aligned with A's COMMENT verdict. Three concrete actionable findings to address: (1) update PR title to drop the stale advisory-lock reference, (2) move the SOFT_FAIL_DBS assignment before the for-db loop at ~line 285 to match the second location's style, (3) add a brief note in the PR description or config explaining why Lucee 7 retains dbdriver Oracle while Lucee 6 requires Other.

wheels-bot[bot]
wheels-bot Bot previously approved these changes May 14, 2026
Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

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

Wheels Bot — Reviewer A

TL;DR: This PR has fully addressed both prior Reviewer A rounds. All three commits carry Signed-off-by trailers (the DCO blocker from round 2), SOFT_FAIL_DBS is now set once before each loop rather than inside the per-database iteration, and CLAUDE.md documents the two assignment sites by workflow step name rather than line numbers. The diff is clean. I am approving.


Docs

Minor nit (non-blocking): CLAUDE.md step name is slightly truncated.

CLAUDE.md line 642 (post-commit) reads:

once in the "Run test suites" step (before the per-database loop)

The actual step name in compat-matrix.yml line 260 is:

- name: Run test suites for all databases

The truncation is unambiguous in context, but a future maintainer doing a literal grep for the step name won't find a match. Consider using the full name, or the step ID (id: run-tests) which is shorter and won't silently diverge on a rename. Non-blocking — the intent is clear.


Commits

All three commits conform to commitlint and the DCO requirement:

SHA Subject Type DCO
906172b ci: unblock Oracle in compat matrix and fix Lucee 6 datasource (#2663) ci ok Signed-off-by ok
fcc1c65 ci(compat-matrix): hoist SOFT_FAIL_DBS out of per-db loop ci ok Signed-off-by ok
3ae22fa docs(claude): describe SOFT_FAIL_DBS locations by step, not line number docs ok Signed-off-by ok

Subjects within 100 chars, not ALL-CAPS, bodies explain the "why." The DCO blocker from the previous round is fully resolved.


Correctness

The SOFT_FAIL_DBS="oracle" assignment now appears exactly twice — once at the top of the "Run test suites for all databases" run: block (~line 275) and once at the top of the "Generate per-engine summary" run: block (~line 470). Because each GitHub Actions run: step launches a fresh shell, the two assignments must be kept in sync; both are, and CLAUDE.md now documents this constraint explicitly. The grep -qw "$db" word-boundary check is correct for the current single-value case and would continue to work if additional database names were added space- or comma-separated.

tools/docker/lucee6/CFConfig.json: the dbdriver change from "Oracle" to "Other" aligns Lucee 6 with the Adobe 2023/2025 and BoxLang configs that already use "Other" and connect successfully. Lucee 7 intentionally retains "dbdriver": "Oracle" — the PR body explains the Lucee-6-specific URL re-templating failure, and the asymmetry is correct.

The unchecked test-plan item ([ ] Trigger compat-matrix on this branch) is noted; the SOFT_FAIL_DBS safety net means any remaining Oracle failures will log as warnings rather than blocking the build, which appropriately limits the blast radius while the follow-up (sub-cluster 3) lands.

@bpamiri
Copy link
Copy Markdown
Collaborator Author

bpamiri commented May 14, 2026

Reviewer B round 2 — your review is anchored at SHA 3273b99a5 (the state right after the initial rebase, before the hoist commit). All three convergence items are already addressed at the current HEAD 3ae22fab2, pushed before this review was generated:

  1. PR title — Already updated to ci: unblock Oracle in compat matrix and fix Lucee 6 datasource. The stale advisory-lock reference is gone.
  2. SOFT_FAIL_DBS hoist — Done in commit fcc1c653a. The first assignment now lives at line 275 (before the per-db for loop in the Run test suites step), the second stays at line 470 (required for the separate Generate per-engine summary step since shell state doesn't cross step boundaries).
  3. Lucee 7 rationale — Added as a paragraph in the PR body: "Lucee 7 retains dbdriver: Oracle — its Oracle extension does not re-template the JDBC URL, so it connects successfully with the current config. The Invalid Oracle URL specified failure in the compat matrix is Lucee-6-only."

Also useful: your note that the DCO GitHub App is not installed in this repo's CI. I went ahead and added Signed-off-by: trailers via git rebase --signoff anyway since A flagged it — harmless either way.

The PR is ready for re-review at 3ae22fab2.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 14, 2026

Wheels Bot — Address Review (round 1)

Both consensus findings from Reviewer A and Reviewer B's round-1 convergence (at f845ffa1c) are already resolved at the current HEAD 3ae22fab2. The author pushed the fix commits between when Reviewer B emitted the converged-changes marker and when this address-review run started, so there is nothing for the bot to commit.

Consensus findings (from B's converged-changes:2683:f845ffa1c... verdict):

  • DCO Signed-off-by: trailers on all commits — verified: each of 906172b38, fcc1c653a, and 3ae22fab2 carries Signed-off-by: Peter Amiri <peter@alurium.com>. Achieved via the author's git rebase --signoff origin/develop + force-push.
  • CLAUDE.md line 642 stale line numbers (~421, ~469) — verified: commit 3ae22fab2 (docs(claude): describe SOFT_FAIL_DBS locations by step, not line number) replaced the numeric refs with workflow-step names (Run test suites / Generate per-engine summary) and added an explicit note that the two assignments must be kept in sync because GitHub Actions run: steps don't share shell state. That last clause also documents the rebuttal to A's false-positive "redundant assignment" nit, which B correctly flagged.

Skipped (not in consensus):

  • A's "second SOFT_FAIL_DBS= at line 470 is redundant" nit — B refuted this as a false positive (separate run: blocks → no shared shell state), so it was excluded from the consensus. Left in place; CLAUDE.md now documents why.
  • A's first-round PR-title / CFConfig.json comment / test-plan suggestions — addressed by the author in the response comment on the first review (PR title updated, Lucee 7 rationale added to the PR body, etc.) and not re-raised in the convergence round.

Because no commit is pushed by this run, no fresh Reviewer A will fire from address-review. The convergence loop should next run Reviewer A against 3ae22fab2 (triggered by the author's earlier push) to verify the fixes and converge on approve.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 14, 2026

Wheels Bot — Reviewer B (round 1)

A's review is accurate and proportionate on the current HEAD. All claims verified against the diff and git log. No sycophancy, no false positives, no missed issues. Aligned on approve.

Sycophancy

None detected. A backed the APPROVE with specific verification: DCO trailers confirmed on all three commits, commit subjects checked against commitlint, SOFT_FAIL_DBS placement verified at both step boundaries, CFConfig.json change traced to the working Adobe/BoxLang precedent, and the unchecked test-plan item explicitly acknowledged with a reasoned rationale (soft-fail safety net limits blast radius). Not a rubber stamp.

False positives

None detected. Verified all A's claims directly:

  • DCO sign-offsgit log confirms Signed-off-by: Peter Amiri <peter@alurium.com> on all three commits (906172b, fcc1c65, 3ae22fa). A's table is correct.
  • Commit types/subjectsci, ci(compat-matrix), docs(claude) are all in the allowed type list; subjects are under 100 chars; none are ALL-CAPS. Verified.
  • SOFT_FAIL_DBS placement — Line 275 is before the per-database loop in the Run test suites for all databases step; line 470 is before the summary loop in the Generate per-engine summary step. Two fresh shells, two required assignments. Correct.
  • grep -qw correctness — The echo "$SOFT_FAIL_DBS" | grep -qw "$db" pattern at lines 431 and 475 works correctly for the current single-value case and would extend to space- or comma-separated lists (word boundaries fire on non-[A-Za-z0-9_] delimiters). A's reasoning holds.
  • Step name nit — A flags CLAUDE.md saying "Run test suites" while the actual step name is "Run test suites for all databases" (confirmed at line 260). Accurate. The "Generate per-engine summary" name on the second occurrence is exact. Non-blocking nit, correctly labelled as such.

Missed issues

None detected. The diff touches only CI YAML, a JSON config file, and CLAUDE.md — no CFML, no cross-engine concerns to probe. The unchecked Oracle matrix run is a known gap, and the SOFT_FAIL_DBS design is explicitly the safety net for it.

Verdict alignment

APPROVE is consistent with A's findings. All prior blockers (DCO, SOFT_FAIL_DBS placement, stale CLAUDE.md) are resolved at this SHA. The one remaining nit (truncated step name) is non-blocking by A's own assessment, which I agree with.

Convergence

Aligned. A's APPROVE is the right call. The PR is review-clean on this SHA.

Match the workflow step name verbatim per PR #2683 reviewer nit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Peter Amiri <peter@alurium.com>
Copy link
Copy Markdown
Contributor

@wheels-bot wheels-bot Bot left a comment

Choose a reason for hiding this comment

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

Wheels Bot — Reviewer A

TL;DR: The head commit bb4d08c9 directly addresses the sole nit from the previous Reviewer A approval (round 3) — CLAUDE.md now references the exact step name "Run test suites for all databases" rather than the truncated version. Both step names in the docs match the workflow verbatim (confirmed: line 260 Run test suites for all databases, line 462 Generate per-engine summary). The PR is clean and I am approving.


Correctness

All substantive changes were verified in prior rounds and are unchanged:

  • Lucee 6 dbdriver fix (tools/docker/lucee6/CFConfig.json): switching from "Oracle" to "Other" prevents the Lucee Oracle extension from re-templating the JDBC URL, matching the working Adobe 2023/2025 and BoxLang configs. Lucee 7 correctly retains "Oracle".
  • SOFT_FAIL_DBS hoist (compat-matrix.yml line 275): set once before the per-database loop rather than reassigned on every iteration. Both run: steps keep their own assignment because GitHub Actions launches a fresh shell per step — this is correct and now documented explicitly in CLAUDE.md.
  • CLAUDE.md update: step names are now exact matches ("Run test suites for all databases", "Generate per-engine summary"), making grep-based navigation reliable and eliminating the line-number rot problem.

Commits

All four commits conform to commitlint and carry DCO sign-offs:

SHA Subject Type DCO
906172b ci: unblock Oracle in compat matrix and fix Lucee 6 datasource (#2663) ci ok Signed-off-by ok
fcc1c65 ci(compat-matrix): hoist SOFT_FAIL_DBS out of per-db loop ci ok Signed-off-by ok
3ae22fa docs(claude): describe SOFT_FAIL_DBS locations by step, not line number docs ok Signed-off-by ok
bb4d08c docs(claude): use exact step name "Run test suites for all databases" docs ok Signed-off-by ok

Subjects within 100 chars, not ALL-CAPS, bodies explain the "why". The DCO blocker from round 2 was resolved in round 3 and holds here.


Remaining open item (non-blocking)

The test-plan checkbox [ ] Trigger compat-matrix on this branch is still open. With SOFT_FAIL_DBS="oracle" in place any residual Oracle failures will log as warnings rather than block merge, which is the appropriate safety net while sub-cluster 3 lands separately. This is understood and acceptable.

@wheels-bot
Copy link
Copy Markdown
Contributor

wheels-bot Bot commented May 14, 2026

Wheels Bot — Reviewer B (round 1)

A's review is accurate and proportionate on the current HEAD. All claims verified. No sycophancy, no false positives, no missed issues. Aligned on approve.

Sycophancy

None detected. A backed the APPROVE with specific verifications: DCO trailers confirmed on all four commits, CLAUDE.md step names checked verbatim against the workflow, and the unchecked test-plan item explicitly acknowledged with a clear rationale (SOFT_FAIL_DBS limits blast radius).

False positives

None detected. Verified A's key claims directly:

  • DCO on bb4d08c9 — commit message ends with Signed-off-by: Peter Amiri <peter@alurium.com>. The prior three commits were verified in round 3 and are unchanged.
  • Step namesgrep -n on compat-matrix.yml confirms: Run test suites for all databases at line 260, Generate per-engine summary at line 462. A's table is exact.
  • CLAUDE.md text — the diff shows both full step names present verbatim, matching A's description.

Missed issues

None detected. The diff touches only CI YAML, a JSON config file, and CLAUDE.md — no CFML, no cross-engine concerns. The SOFT_FAIL_DBS comment in the first YAML occurrence correctly references issue #2663 and its sub-clusters. The second occurrence (summary step) correctly omits the comment, which is fine since the first occurrence carries the explanation. The unchecked Oracle matrix run is a known and accepted gap.

Verdict alignment

APPROVE is consistent with A's findings. All prior blockers (DCO, SOFT_FAIL_DBS placement, stale CLAUDE.md) are resolved. The sole remaining nit from round 3 (truncated step name) is confirmed fixed in bb4d08c9. Nothing blocking remains.

Convergence

Aligned. A's APPROVE is the right call. The PR is review-clean on this SHA.

@bpamiri bpamiri merged commit 58b0f9c into develop May 14, 2026
6 checks passed
@bpamiri bpamiri deleted the peter/fix-2663-oracle-ci branch May 14, 2026 23:34
bpamiri pushed a commit that referenced this pull request May 15, 2026
… to avoid FK collision

Closes #2663 (sub-cluster 3) and resolves #2664. The migrator spec's
migrateTo describe block was leaking the wheels_migrator_versions /
c_o_r_e_migrator_versions tables (plus their fk_wheels_level FK
constraint) between tests. When the "uses specified versions table
name" test then swapped migratorTableName to c_o_r_e_migrator_versions,
the bootstrap path in $getVersionsPreviouslyMigrated() added the same
fk_wheels_level constraint to a different table — MySQL, H2, SQL
Server, and Oracle scope FK names per-schema rather than per-table,
so the second CREATE failed with ORA-02264 ("name already used by an
existing constraint") / "Duplicate foreign key constraint name".

Mirror the cleanup pattern already used by the F15 Phase 1 describe
block: in beforeEach, drop both table-name families inside try/catch
so the bootstrap recreates them cleanly per test. wheels_levels can
stay — it is referenced by the FK, not the source of it, and the
bootstrap is happy to reuse it.

This completes the three-cluster fix for #2663:
- sub-cluster 1 (Lucee 6 Oracle JDBC URL) landed in #2683.
- sub-cluster 2 (DBMS_LOCK / lockingSpec guard) landed via #2670.
- sub-cluster 3 (constraint cleanup) — this PR.

Removing "oracle" from SOFT_FAIL_DBS in compat-matrix.yml is left for
a follow-up once a green Oracle matrix run is observed.

Signed-off-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant