Skip to content

Promote post-release stability fixes to production#76

Merged
WilliamAGH merged 8 commits into
mainfrom
dev
Jul 13, 2026
Merged

Promote post-release stability fixes to production#76
WilliamAGH merged 8 commits into
mainfrom
dev

Conversation

@WilliamAGH

Copy link
Copy Markdown
Owner

Summary

  • restrict CI workflow permissions and correct Java keyword boundary detection
  • fix guided and retry-stream error handling, including active fallback provider metadata
  • name the mobile lesson back control for assistive technology
  • keep enrichment markers out of Java code while allowing real context-appropriate APIs

Verification

  • full pre-push build and static-analysis gate passed
  • 338 backend tests passed
  • frontend production build, lint, type-aware lint, Svelte checks, PMD, and SpotBugs passed
  • production dogfood issue ISSUE-001 has a regression test and will be reverified after deployment

Deployment validation

After merge, confirm Coolify deploys the exact main SHA, then rerun health/readiness, normal chat, guided learning, citations, console, and mobile accessibility checks on https://javachat.ai.

Limit GitHub Actions to the read-only repository access required by build and test jobs.
Prevent checkout credentials from persisting beyond each checkout step.

- grant contents read at workflow scope
- disable credential persistence for both jobs
Avoid marking unrelated code as Java when common words merely contain a Java keyword.
Model Java identifier-part semantics so Unicode and ignorable characters cannot split false keyword tokens.

- tokenize unmarked code blocks before keyword lookup
- cover substring and identifier-ignorable regressions
Satisfy the canonical font-family syntax while shrinking the touched global stylesheet below its repository size ceiling.
Remove animation definitions with no consumers instead of relocating dead styles.

- unquote the Fraunces family name
- delete two unused keyframe rules
Prevent guided chat failures from exposing internal exception class names to clients.
Preserve retry metadata and structured server diagnostics for operators.

- emit a fixed user-facing stream error contract
- assert exception types and secret messages remain server-side
The lesson back control hid its only visible label at the mobile breakpoint, leaving screen readers with an unnamed button.

- retain an All Lessons accessible name at every viewport
- cover the responsive control with a role-and-name regression test
Earlier stream status events could override the backend's terminal retry decision, causing recoverable failures to stop or fatal failures to retry.

- give explicit terminal retry metadata precedence
- retain signature-based recovery for unstructured failures
- cover retryable and fatal terminal overrides
Model responses can place enrichment syntax inside code spans or emit invented Java examples, producing broken instructional output.

Define marker and fenced-code boundaries in the canonical system prompt and bind the regression test to those owner-defined clauses.

- require enrichment markers on prose-only lines
- require fenced Java examples to use real compilable APIs
Copilot AI review requested due to automatic review settings July 13, 2026 18:01
@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@WilliamAGH, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 55 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 6f80fb03-e65a-4cf1-aa6d-467d018b8565

📥 Commits

Reviewing files that changed from the base of the PR and between 10c8f4a and f3fb8dd.

📒 Files selected for processing (21)
  • .github/workflows/build.yml
  • frontend/src/lib/components/LearnView.svelte
  • frontend/src/lib/components/LearnView.test.ts
  • frontend/src/lib/services/javaLanguageDetection.ts
  • frontend/src/lib/services/markdown.test.ts
  • frontend/src/lib/services/streamRecovery.test.ts
  • frontend/src/lib/services/streamRecovery.ts
  • frontend/src/styles/global.css
  • src/main/java/com/williamcallahan/javachat/config/SystemPromptConfig.java
  • src/main/java/com/williamcallahan/javachat/service/OpenAIStreamingService.java
  • src/main/java/com/williamcallahan/javachat/service/StreamingAttemptContext.java
  • src/main/java/com/williamcallahan/javachat/service/StreamingResult.java
  • src/main/java/com/williamcallahan/javachat/web/ChatController.java
  • src/main/java/com/williamcallahan/javachat/web/GuidedLearningController.java
  • src/test/java/com/williamcallahan/javachat/config/SystemPromptConfigTest.java
  • src/test/java/com/williamcallahan/javachat/service/OpenAIStreamingServiceTest.java
  • src/test/java/com/williamcallahan/javachat/service/StreamingAttemptContextTest.java
  • src/test/java/com/williamcallahan/javachat/web/ChatControllerStreamingFailureTest.java
  • src/test/java/com/williamcallahan/javachat/web/GuidedLearningControllerStreamingFailureTest.java
  • src/test/java/com/williamcallahan/javachat/web/GuidedSseCitationEventTest.java
  • src/test/java/com/williamcallahan/javachat/web/StreamingProviderFallbackSseEventTest.java
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@WilliamAGH WilliamAGH merged commit 17a5051 into main Jul 13, 2026
6 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR promotes a set of post-release stability fixes to production across backend streaming/SSE behavior, system prompt guardrails, frontend stream recovery and Java code detection, accessibility labeling, and CI hardening.

Changes:

  • Backend: publish replayable “provider change” SSE events during pre-text provider fallback and tighten guided-stream client error messaging.
  • Frontend: make stream retry decisions respect terminal backend retry metadata; improve Java keyword boundary detection; add mobile back-button accessibility labeling.
  • Ops/CI: restrict GitHub Actions workflow permissions and disable persisted checkout credentials.

Reviewed changes

Copilot reviewed 21 out of 21 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/test/java/com/williamcallahan/javachat/web/StreamingProviderFallbackSseEventTest.java Adds regression coverage ensuring provider fallback + notice signals precede fallback text in SSE streams.
src/test/java/com/williamcallahan/javachat/web/GuidedSseCitationEventTest.java Updates test construction for the expanded StreamingResult shape.
src/test/java/com/williamcallahan/javachat/web/GuidedLearningControllerStreamingFailureTest.java Strengthens assertions that client-visible errors don’t leak exception types/messages.
src/test/java/com/williamcallahan/javachat/web/ChatControllerStreamingFailureTest.java Updates test construction for the expanded StreamingResult shape.
src/test/java/com/williamcallahan/javachat/service/StreamingAttemptContextTest.java Updates attempt-context creation to include provider-change signaling.
src/test/java/com/williamcallahan/javachat/service/OpenAIStreamingServiceTest.java Verifies provider-change and fallback notice signals are emitted and replayable.
src/test/java/com/williamcallahan/javachat/config/SystemPromptConfigTest.java Adds regression coverage for system-prompt clauses protecting markers and Java fences.
src/main/java/com/williamcallahan/javachat/web/GuidedLearningController.java Emits provider-change SSE events and standardizes guided stream error payload text.
src/main/java/com/williamcallahan/javachat/web/ChatController.java Emits provider-change SSE events alongside notices/data/heartbeats.
src/main/java/com/williamcallahan/javachat/service/StreamingResult.java Extends streaming result contract to include provider-change signals.
src/main/java/com/williamcallahan/javachat/service/StreamingAttemptContext.java Carries a provider-change sink through bounded streaming attempts.
src/main/java/com/williamcallahan/javachat/service/OpenAIStreamingService.java Makes fallback signals replayable and emits provider-change metadata on pre-text retry.
src/main/java/com/williamcallahan/javachat/config/SystemPromptConfig.java Adds explicit marker/code-boundary and “valid Java fence” clauses to the core prompt template.
frontend/src/styles/global.css Minor font-family tweak; removes unused keyframes.
frontend/src/lib/services/streamRecovery.ts Gives terminal stream error metadata precedence for retry decisions.
frontend/src/lib/services/streamRecovery.test.ts Adds coverage for terminal retryable/fatal override behavior.
frontend/src/lib/services/markdown.test.ts Updates tests to validate Java keyword boundary detection and avoid substring false positives.
frontend/src/lib/services/javaLanguageDetection.ts Implements boundary-aware Java keyword detection logic.
frontend/src/lib/components/LearnView.test.ts Adds test coverage for accessible “All Lessons” back control naming on mobile.
frontend/src/lib/components/LearnView.svelte Adds aria-label to the back button for assistive technologies.
.github/workflows/build.yml Restricts workflow permissions and disables persisted checkout credentials.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread frontend/src/lib/services/javaLanguageDetection.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f3fb8ddeb4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread frontend/src/lib/services/streamRecovery.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants