Skip to content

Add guided study V3 personal study loop - #1602

Merged
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop
Apr 24, 2026
Merged

Add guided study V3 personal study loop#1602
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Adds the Guided Study V3 retention and personalization layer on top of PR #1593. This turns guided study into a usable multi-session loop without adding more clutter to the chapter reader.

Changes

  • Upgrades the chapter CTA to switch between Study this chapter, Continue study, and Review insights.
  • Adds a guided_study_questions table plus question persistence and resolution mutations.
  • Adds useGuidedStudyChapterState for chapter-level resume/review state.
  • Reworks useReviewQueue and MyStudyScreen into a personal study dashboard with:
    • next step
    • continue studying
    • due today
    • open questions
    • concepts growing
    • recent takeaways
  • Adds guided-study personalization helpers for next-action recommendations and chapter/step labeling.
  • Adds focused component, hook, DB, service, and mutation tests for the V3 slice.

Notes

  • This PR is intentionally stacked on codex/guided-study-v2-evidence-trail so PR Add guided study V2 evidence trail #1593 can land first.
  • The main local checkout still had unrelated PR Implement guided study session v1 #1580 repair edits, so this branch was assembled in a temporary clean repo copy and then pushed.
  • Focused Jest verification passed locally in the temporary checkout:
    • guidedStudyV3Personal.test.tsx
    • userDatabaseV3.test.ts
    • useGuidedStudyChapterState.test.ts
    • useReviewQueue.test.ts
    • guidedStudyPersonal.test.ts
    • guidedStudyV3Mutations.test.ts
  • TypeScript verification was not reliable in the temp checkout because it did not have its own installed dependencies; CI should be treated as the source of truth for the full branch.

@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v2-evidence-trail branch from d3142e3 to 68e9c9aCompareApril 24, 2026 16:07
@CraigBuckmaster
CraigBuckmaster marked this pull request as ready for review April 24, 2026 16:07
Base automatically changed from codex/guided-study-v2-evidence-trail to masterApril 24, 2026 16:11
StevenBuckmasterand others added 2 commits April 24, 2026 16:12
Import + call site were using a name that no longer exists on services/guidedStudy/review. The exported function is nextIntervalAfter (same signature: (number) => number | null). Fixes the lint / tsc failure on this branch.
@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v3-personal-study-loop branch from 95b3723 to b3db7f8CompareApril 24, 2026 16:12
@github-actions

github-actionsBot commented Apr 24, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3602❌ 03602
Suites✅ 490❌ 0490

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 67.5s

During the v3→master rebase, v3 replayed its commit that was authored
against v1's *original* userMutations.ts. V1's review-comments fix
(which refactored createOrResumeGuidedStudySession and
completeGuidedReviewItem to cleaner patterns) landed in v1's squash
merge to master, but the rebase didn't surface that as a conflict
because v3 rewrote the whole function bodies.
Changes:
- userMutations.ts: restore master's createOrResumeGuidedStudySession
(SELECT-then-INSERT, return lastInsertRowId) — v3's INSERT-OR-IGNORE
pattern is unnecessary given v1's v20 migration's partial unique index.
- userMutations.ts: restore master's completeGuidedReviewItem
(transaction wraps SELECT+UPDATE+INSERT) — matches the test contract
that transaction always opens even for no-op rows.
- StudySessionCTA.tsx: use '·' separator everywhere (master's design
style), not '|'.
- useGuidedStudySession.test.ts: add mock for upsertGuidedStudyQuestion
(the v3 hook correctly calls this new dep; the test just needed the
mock).
v3's intentional additions preserved:
- upsertGuidedStudyQuestion / resolveGuidedStudyQuestion (userMutations)
- mode/currentStep/dueCount props on StudySessionCTA + buildCopy
- chapterId awareness + question persistence in useGuidedStudySession
- migration v21 (guided_study_questions table)
- personal.ts, useGuidedStudyChapterState, MyStudyScreen dashboard
…h master's dot style
Follow-up to 281ed37. v3's own CTA test expected '|' separator that
281ed37 changed to '·' in the component to match master's visual style.
Updating the test rather than the component since '·' is the established
design token separator throughout the app.
@CraigBuckmaster
CraigBuckmaster merged commit 6946d4a into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the codex/guided-study-v3-personal-study-loop branch April 24, 2026 16:40
Sign up for freeto 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.

3 participants

@CraigBuckmaster@StevenBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Add guided study V3 personal study loop by CraigBuckmaster · Pull Request #1602 · CraigBuckmaster/ScriptureDeepDive · GitHub
Skip to content

Add guided study V3 personal study loop - #1602

Merged
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop
Apr 24, 2026
Merged

Add guided study V3 personal study loop#1602
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Adds the Guided Study V3 retention and personalization layer on top of PR #1593. This turns guided study into a usable multi-session loop without adding more clutter to the chapter reader.

Changes

  • Upgrades the chapter CTA to switch between Study this chapter, Continue study, and Review insights.
  • Adds a guided_study_questions table plus question persistence and resolution mutations.
  • Adds useGuidedStudyChapterState for chapter-level resume/review state.
  • Reworks useReviewQueue and MyStudyScreen into a personal study dashboard with:
    • next step
    • continue studying
    • due today
    • open questions
    • concepts growing
    • recent takeaways
  • Adds guided-study personalization helpers for next-action recommendations and chapter/step labeling.
  • Adds focused component, hook, DB, service, and mutation tests for the V3 slice.

Notes

  • This PR is intentionally stacked on codex/guided-study-v2-evidence-trail so PR Add guided study V2 evidence trail #1593 can land first.
  • The main local checkout still had unrelated PR Implement guided study session v1 #1580 repair edits, so this branch was assembled in a temporary clean repo copy and then pushed.
  • Focused Jest verification passed locally in the temporary checkout:
    • guidedStudyV3Personal.test.tsx
    • userDatabaseV3.test.ts
    • useGuidedStudyChapterState.test.ts
    • useReviewQueue.test.ts
    • guidedStudyPersonal.test.ts
    • guidedStudyV3Mutations.test.ts
  • TypeScript verification was not reliable in the temp checkout because it did not have its own installed dependencies; CI should be treated as the source of truth for the full branch.

@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v2-evidence-trail branch from d3142e3 to 68e9c9aCompareApril 24, 2026 16:07
@CraigBuckmaster
CraigBuckmaster marked this pull request as ready for review April 24, 2026 16:07
Base automatically changed from codex/guided-study-v2-evidence-trail to masterApril 24, 2026 16:11
StevenBuckmasterand others added 2 commits April 24, 2026 16:12
Import + call site were using a name that no longer exists on services/guidedStudy/review. The exported function is nextIntervalAfter (same signature: (number) => number | null). Fixes the lint / tsc failure on this branch.
@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v3-personal-study-loop branch from 95b3723 to b3db7f8CompareApril 24, 2026 16:12
@github-actions

github-actionsBot commented Apr 24, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3602❌ 03602
Suites✅ 490❌ 0490

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 67.5s

During the v3→master rebase, v3 replayed its commit that was authored
against v1's *original* userMutations.ts. V1's review-comments fix
(which refactored createOrResumeGuidedStudySession and
completeGuidedReviewItem to cleaner patterns) landed in v1's squash
merge to master, but the rebase didn't surface that as a conflict
because v3 rewrote the whole function bodies.
Changes:
- userMutations.ts: restore master's createOrResumeGuidedStudySession
(SELECT-then-INSERT, return lastInsertRowId) — v3's INSERT-OR-IGNORE
pattern is unnecessary given v1's v20 migration's partial unique index.
- userMutations.ts: restore master's completeGuidedReviewItem
(transaction wraps SELECT+UPDATE+INSERT) — matches the test contract
that transaction always opens even for no-op rows.
- StudySessionCTA.tsx: use '·' separator everywhere (master's design
style), not '|'.
- useGuidedStudySession.test.ts: add mock for upsertGuidedStudyQuestion
(the v3 hook correctly calls this new dep; the test just needed the
mock).
v3's intentional additions preserved:
- upsertGuidedStudyQuestion / resolveGuidedStudyQuestion (userMutations)
- mode/currentStep/dueCount props on StudySessionCTA + buildCopy
- chapterId awareness + question persistence in useGuidedStudySession
- migration v21 (guided_study_questions table)
- personal.ts, useGuidedStudyChapterState, MyStudyScreen dashboard
…h master's dot style
Follow-up to 281ed37. v3's own CTA test expected '|' separator that
281ed37 changed to '·' in the component to match master's visual style.
Updating the test rather than the component since '·' is the established
design token separator throughout the app.
@CraigBuckmaster
CraigBuckmaster merged commit 6946d4a into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the codex/guided-study-v3-personal-study-loop branch April 24, 2026 16:40
Sign up for freeto 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.

3 participants

@CraigBuckmaster@StevenBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add guided study V3 personal study loop by CraigBuckmaster · Pull Request #1602 · CraigBuckmaster/ScriptureDeepDive · GitHub
Skip to content

Add guided study V3 personal study loop - #1602

Merged
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop
Apr 24, 2026
Merged

Add guided study V3 personal study loop#1602
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Adds the Guided Study V3 retention and personalization layer on top of PR #1593. This turns guided study into a usable multi-session loop without adding more clutter to the chapter reader.

Changes

  • Upgrades the chapter CTA to switch between Study this chapter, Continue study, and Review insights.
  • Adds a guided_study_questions table plus question persistence and resolution mutations.
  • Adds useGuidedStudyChapterState for chapter-level resume/review state.
  • Reworks useReviewQueue and MyStudyScreen into a personal study dashboard with:
    • next step
    • continue studying
    • due today
    • open questions
    • concepts growing
    • recent takeaways
  • Adds guided-study personalization helpers for next-action recommendations and chapter/step labeling.
  • Adds focused component, hook, DB, service, and mutation tests for the V3 slice.

Notes

  • This PR is intentionally stacked on codex/guided-study-v2-evidence-trail so PR Add guided study V2 evidence trail #1593 can land first.
  • The main local checkout still had unrelated PR Implement guided study session v1 #1580 repair edits, so this branch was assembled in a temporary clean repo copy and then pushed.
  • Focused Jest verification passed locally in the temporary checkout:
    • guidedStudyV3Personal.test.tsx
    • userDatabaseV3.test.ts
    • useGuidedStudyChapterState.test.ts
    • useReviewQueue.test.ts
    • guidedStudyPersonal.test.ts
    • guidedStudyV3Mutations.test.ts
  • TypeScript verification was not reliable in the temp checkout because it did not have its own installed dependencies; CI should be treated as the source of truth for the full branch.

@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v2-evidence-trail branch from d3142e3 to 68e9c9aCompareApril 24, 2026 16:07
@CraigBuckmaster
CraigBuckmaster marked this pull request as ready for review April 24, 2026 16:07
Base automatically changed from codex/guided-study-v2-evidence-trail to masterApril 24, 2026 16:11
StevenBuckmasterand others added 2 commits April 24, 2026 16:12
Import + call site were using a name that no longer exists on services/guidedStudy/review. The exported function is nextIntervalAfter (same signature: (number) => number | null). Fixes the lint / tsc failure on this branch.
@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v3-personal-study-loop branch from 95b3723 to b3db7f8CompareApril 24, 2026 16:12
@github-actions

github-actionsBot commented Apr 24, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3602❌ 03602
Suites✅ 490❌ 0490

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 67.5s

During the v3→master rebase, v3 replayed its commit that was authored
against v1's *original* userMutations.ts. V1's review-comments fix
(which refactored createOrResumeGuidedStudySession and
completeGuidedReviewItem to cleaner patterns) landed in v1's squash
merge to master, but the rebase didn't surface that as a conflict
because v3 rewrote the whole function bodies.
Changes:
- userMutations.ts: restore master's createOrResumeGuidedStudySession
(SELECT-then-INSERT, return lastInsertRowId) — v3's INSERT-OR-IGNORE
pattern is unnecessary given v1's v20 migration's partial unique index.
- userMutations.ts: restore master's completeGuidedReviewItem
(transaction wraps SELECT+UPDATE+INSERT) — matches the test contract
that transaction always opens even for no-op rows.
- StudySessionCTA.tsx: use '·' separator everywhere (master's design
style), not '|'.
- useGuidedStudySession.test.ts: add mock for upsertGuidedStudyQuestion
(the v3 hook correctly calls this new dep; the test just needed the
mock).
v3's intentional additions preserved:
- upsertGuidedStudyQuestion / resolveGuidedStudyQuestion (userMutations)
- mode/currentStep/dueCount props on StudySessionCTA + buildCopy
- chapterId awareness + question persistence in useGuidedStudySession
- migration v21 (guided_study_questions table)
- personal.ts, useGuidedStudyChapterState, MyStudyScreen dashboard
…h master's dot style
Follow-up to 281ed37. v3's own CTA test expected '|' separator that
281ed37 changed to '·' in the component to match master's visual style.
Updating the test rather than the component since '·' is the established
design token separator throughout the app.
@CraigBuckmaster
CraigBuckmaster merged commit 6946d4a into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the codex/guided-study-v3-personal-study-loop branch April 24, 2026 16:40
Sign up for freeto 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.

3 participants

@CraigBuckmaster@StevenBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add guided study V3 personal study loop by CraigBuckmaster · Pull Request #1602 · CraigBuckmaster/ScriptureDeepDive · GitHub
Skip to content

Add guided study V3 personal study loop - #1602

Merged
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop
Apr 24, 2026
Merged

Add guided study V3 personal study loop#1602
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Adds the Guided Study V3 retention and personalization layer on top of PR #1593. This turns guided study into a usable multi-session loop without adding more clutter to the chapter reader.

Changes

  • Upgrades the chapter CTA to switch between Study this chapter, Continue study, and Review insights.
  • Adds a guided_study_questions table plus question persistence and resolution mutations.
  • Adds useGuidedStudyChapterState for chapter-level resume/review state.
  • Reworks useReviewQueue and MyStudyScreen into a personal study dashboard with:
    • next step
    • continue studying
    • due today
    • open questions
    • concepts growing
    • recent takeaways
  • Adds guided-study personalization helpers for next-action recommendations and chapter/step labeling.
  • Adds focused component, hook, DB, service, and mutation tests for the V3 slice.

Notes

  • This PR is intentionally stacked on codex/guided-study-v2-evidence-trail so PR Add guided study V2 evidence trail #1593 can land first.
  • The main local checkout still had unrelated PR Implement guided study session v1 #1580 repair edits, so this branch was assembled in a temporary clean repo copy and then pushed.
  • Focused Jest verification passed locally in the temporary checkout:
    • guidedStudyV3Personal.test.tsx
    • userDatabaseV3.test.ts
    • useGuidedStudyChapterState.test.ts
    • useReviewQueue.test.ts
    • guidedStudyPersonal.test.ts
    • guidedStudyV3Mutations.test.ts
  • TypeScript verification was not reliable in the temp checkout because it did not have its own installed dependencies; CI should be treated as the source of truth for the full branch.

@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v2-evidence-trail branch from d3142e3 to 68e9c9aCompareApril 24, 2026 16:07
@CraigBuckmaster
CraigBuckmaster marked this pull request as ready for review April 24, 2026 16:07
Base automatically changed from codex/guided-study-v2-evidence-trail to masterApril 24, 2026 16:11
StevenBuckmasterand others added 2 commits April 24, 2026 16:12
Import + call site were using a name that no longer exists on services/guidedStudy/review. The exported function is nextIntervalAfter (same signature: (number) => number | null). Fixes the lint / tsc failure on this branch.
@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v3-personal-study-loop branch from 95b3723 to b3db7f8CompareApril 24, 2026 16:12
@github-actions

github-actionsBot commented Apr 24, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3602❌ 03602
Suites✅ 490❌ 0490

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 67.5s

During the v3→master rebase, v3 replayed its commit that was authored
against v1's *original* userMutations.ts. V1's review-comments fix
(which refactored createOrResumeGuidedStudySession and
completeGuidedReviewItem to cleaner patterns) landed in v1's squash
merge to master, but the rebase didn't surface that as a conflict
because v3 rewrote the whole function bodies.
Changes:
- userMutations.ts: restore master's createOrResumeGuidedStudySession
(SELECT-then-INSERT, return lastInsertRowId) — v3's INSERT-OR-IGNORE
pattern is unnecessary given v1's v20 migration's partial unique index.
- userMutations.ts: restore master's completeGuidedReviewItem
(transaction wraps SELECT+UPDATE+INSERT) — matches the test contract
that transaction always opens even for no-op rows.
- StudySessionCTA.tsx: use '·' separator everywhere (master's design
style), not '|'.
- useGuidedStudySession.test.ts: add mock for upsertGuidedStudyQuestion
(the v3 hook correctly calls this new dep; the test just needed the
mock).
v3's intentional additions preserved:
- upsertGuidedStudyQuestion / resolveGuidedStudyQuestion (userMutations)
- mode/currentStep/dueCount props on StudySessionCTA + buildCopy
- chapterId awareness + question persistence in useGuidedStudySession
- migration v21 (guided_study_questions table)
- personal.ts, useGuidedStudyChapterState, MyStudyScreen dashboard
…h master's dot style
Follow-up to 281ed37. v3's own CTA test expected '|' separator that
281ed37 changed to '·' in the component to match master's visual style.
Updating the test rather than the component since '·' is the established
design token separator throughout the app.
@CraigBuckmaster
CraigBuckmaster merged commit 6946d4a into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the codex/guided-study-v3-personal-study-loop branch April 24, 2026 16:40
Sign up for freeto 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.

3 participants

@CraigBuckmaster@StevenBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Add guided study V3 personal study loop by CraigBuckmaster · Pull Request #1602 · CraigBuckmaster/ScriptureDeepDive · GitHub
Skip to content

Add guided study V3 personal study loop - #1602

Merged
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop
Apr 24, 2026
Merged

Add guided study V3 personal study loop#1602
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Adds the Guided Study V3 retention and personalization layer on top of PR #1593. This turns guided study into a usable multi-session loop without adding more clutter to the chapter reader.

Changes

  • Upgrades the chapter CTA to switch between Study this chapter, Continue study, and Review insights.
  • Adds a guided_study_questions table plus question persistence and resolution mutations.
  • Adds useGuidedStudyChapterState for chapter-level resume/review state.
  • Reworks useReviewQueue and MyStudyScreen into a personal study dashboard with:
    • next step
    • continue studying
    • due today
    • open questions
    • concepts growing
    • recent takeaways
  • Adds guided-study personalization helpers for next-action recommendations and chapter/step labeling.
  • Adds focused component, hook, DB, service, and mutation tests for the V3 slice.

Notes

  • This PR is intentionally stacked on codex/guided-study-v2-evidence-trail so PR Add guided study V2 evidence trail #1593 can land first.
  • The main local checkout still had unrelated PR Implement guided study session v1 #1580 repair edits, so this branch was assembled in a temporary clean repo copy and then pushed.
  • Focused Jest verification passed locally in the temporary checkout:
    • guidedStudyV3Personal.test.tsx
    • userDatabaseV3.test.ts
    • useGuidedStudyChapterState.test.ts
    • useReviewQueue.test.ts
    • guidedStudyPersonal.test.ts
    • guidedStudyV3Mutations.test.ts
  • TypeScript verification was not reliable in the temp checkout because it did not have its own installed dependencies; CI should be treated as the source of truth for the full branch.

@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v2-evidence-trail branch from d3142e3 to 68e9c9aCompareApril 24, 2026 16:07
@CraigBuckmaster
CraigBuckmaster marked this pull request as ready for review April 24, 2026 16:07
Base automatically changed from codex/guided-study-v2-evidence-trail to masterApril 24, 2026 16:11
StevenBuckmasterand others added 2 commits April 24, 2026 16:12
Import + call site were using a name that no longer exists on services/guidedStudy/review. The exported function is nextIntervalAfter (same signature: (number) => number | null). Fixes the lint / tsc failure on this branch.
@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v3-personal-study-loop branch from 95b3723 to b3db7f8CompareApril 24, 2026 16:12
@github-actions

github-actionsBot commented Apr 24, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3602❌ 03602
Suites✅ 490❌ 0490

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 67.5s

During the v3→master rebase, v3 replayed its commit that was authored
against v1's *original* userMutations.ts. V1's review-comments fix
(which refactored createOrResumeGuidedStudySession and
completeGuidedReviewItem to cleaner patterns) landed in v1's squash
merge to master, but the rebase didn't surface that as a conflict
because v3 rewrote the whole function bodies.
Changes:
- userMutations.ts: restore master's createOrResumeGuidedStudySession
(SELECT-then-INSERT, return lastInsertRowId) — v3's INSERT-OR-IGNORE
pattern is unnecessary given v1's v20 migration's partial unique index.
- userMutations.ts: restore master's completeGuidedReviewItem
(transaction wraps SELECT+UPDATE+INSERT) — matches the test contract
that transaction always opens even for no-op rows.
- StudySessionCTA.tsx: use '·' separator everywhere (master's design
style), not '|'.
- useGuidedStudySession.test.ts: add mock for upsertGuidedStudyQuestion
(the v3 hook correctly calls this new dep; the test just needed the
mock).
v3's intentional additions preserved:
- upsertGuidedStudyQuestion / resolveGuidedStudyQuestion (userMutations)
- mode/currentStep/dueCount props on StudySessionCTA + buildCopy
- chapterId awareness + question persistence in useGuidedStudySession
- migration v21 (guided_study_questions table)
- personal.ts, useGuidedStudyChapterState, MyStudyScreen dashboard
…h master's dot style
Follow-up to 281ed37. v3's own CTA test expected '|' separator that
281ed37 changed to '·' in the component to match master's visual style.
Updating the test rather than the component since '·' is the established
design token separator throughout the app.
@CraigBuckmaster
CraigBuckmaster merged commit 6946d4a into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the codex/guided-study-v3-personal-study-loop branch April 24, 2026 16:40
Sign up for freeto 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.

3 participants

@CraigBuckmaster@StevenBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add guided study V3 personal study loop by CraigBuckmaster · Pull Request #1602 · CraigBuckmaster/ScriptureDeepDive · GitHub
Skip to content

Add guided study V3 personal study loop - #1602

Merged
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop
Apr 24, 2026
Merged

Add guided study V3 personal study loop#1602
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Adds the Guided Study V3 retention and personalization layer on top of PR #1593. This turns guided study into a usable multi-session loop without adding more clutter to the chapter reader.

Changes

  • Upgrades the chapter CTA to switch between Study this chapter, Continue study, and Review insights.
  • Adds a guided_study_questions table plus question persistence and resolution mutations.
  • Adds useGuidedStudyChapterState for chapter-level resume/review state.
  • Reworks useReviewQueue and MyStudyScreen into a personal study dashboard with:
    • next step
    • continue studying
    • due today
    • open questions
    • concepts growing
    • recent takeaways
  • Adds guided-study personalization helpers for next-action recommendations and chapter/step labeling.
  • Adds focused component, hook, DB, service, and mutation tests for the V3 slice.

Notes

  • This PR is intentionally stacked on codex/guided-study-v2-evidence-trail so PR Add guided study V2 evidence trail #1593 can land first.
  • The main local checkout still had unrelated PR Implement guided study session v1 #1580 repair edits, so this branch was assembled in a temporary clean repo copy and then pushed.
  • Focused Jest verification passed locally in the temporary checkout:
    • guidedStudyV3Personal.test.tsx
    • userDatabaseV3.test.ts
    • useGuidedStudyChapterState.test.ts
    • useReviewQueue.test.ts
    • guidedStudyPersonal.test.ts
    • guidedStudyV3Mutations.test.ts
  • TypeScript verification was not reliable in the temp checkout because it did not have its own installed dependencies; CI should be treated as the source of truth for the full branch.

@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v2-evidence-trail branch from d3142e3 to 68e9c9aCompareApril 24, 2026 16:07
@CraigBuckmaster
CraigBuckmaster marked this pull request as ready for review April 24, 2026 16:07
Base automatically changed from codex/guided-study-v2-evidence-trail to masterApril 24, 2026 16:11
StevenBuckmasterand others added 2 commits April 24, 2026 16:12
Import + call site were using a name that no longer exists on services/guidedStudy/review. The exported function is nextIntervalAfter (same signature: (number) => number | null). Fixes the lint / tsc failure on this branch.
@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v3-personal-study-loop branch from 95b3723 to b3db7f8CompareApril 24, 2026 16:12
@github-actions

github-actionsBot commented Apr 24, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3602❌ 03602
Suites✅ 490❌ 0490

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 67.5s

During the v3→master rebase, v3 replayed its commit that was authored
against v1's *original* userMutations.ts. V1's review-comments fix
(which refactored createOrResumeGuidedStudySession and
completeGuidedReviewItem to cleaner patterns) landed in v1's squash
merge to master, but the rebase didn't surface that as a conflict
because v3 rewrote the whole function bodies.
Changes:
- userMutations.ts: restore master's createOrResumeGuidedStudySession
(SELECT-then-INSERT, return lastInsertRowId) — v3's INSERT-OR-IGNORE
pattern is unnecessary given v1's v20 migration's partial unique index.
- userMutations.ts: restore master's completeGuidedReviewItem
(transaction wraps SELECT+UPDATE+INSERT) — matches the test contract
that transaction always opens even for no-op rows.
- StudySessionCTA.tsx: use '·' separator everywhere (master's design
style), not '|'.
- useGuidedStudySession.test.ts: add mock for upsertGuidedStudyQuestion
(the v3 hook correctly calls this new dep; the test just needed the
mock).
v3's intentional additions preserved:
- upsertGuidedStudyQuestion / resolveGuidedStudyQuestion (userMutations)
- mode/currentStep/dueCount props on StudySessionCTA + buildCopy
- chapterId awareness + question persistence in useGuidedStudySession
- migration v21 (guided_study_questions table)
- personal.ts, useGuidedStudyChapterState, MyStudyScreen dashboard
…h master's dot style
Follow-up to 281ed37. v3's own CTA test expected '|' separator that
281ed37 changed to '·' in the component to match master's visual style.
Updating the test rather than the component since '·' is the established
design token separator throughout the app.
@CraigBuckmaster
CraigBuckmaster merged commit 6946d4a into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the codex/guided-study-v3-personal-study-loop branch April 24, 2026 16:40
Sign up for freeto 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.

3 participants

@CraigBuckmaster@StevenBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add guided study V3 personal study loop by CraigBuckmaster · Pull Request #1602 · CraigBuckmaster/ScriptureDeepDive · GitHub
Skip to content

Add guided study V3 personal study loop - #1602

Merged
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop
Apr 24, 2026
Merged

Add guided study V3 personal study loop#1602
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Adds the Guided Study V3 retention and personalization layer on top of PR #1593. This turns guided study into a usable multi-session loop without adding more clutter to the chapter reader.

Changes

  • Upgrades the chapter CTA to switch between Study this chapter, Continue study, and Review insights.
  • Adds a guided_study_questions table plus question persistence and resolution mutations.
  • Adds useGuidedStudyChapterState for chapter-level resume/review state.
  • Reworks useReviewQueue and MyStudyScreen into a personal study dashboard with:
    • next step
    • continue studying
    • due today
    • open questions
    • concepts growing
    • recent takeaways
  • Adds guided-study personalization helpers for next-action recommendations and chapter/step labeling.
  • Adds focused component, hook, DB, service, and mutation tests for the V3 slice.

Notes

  • This PR is intentionally stacked on codex/guided-study-v2-evidence-trail so PR Add guided study V2 evidence trail #1593 can land first.
  • The main local checkout still had unrelated PR Implement guided study session v1 #1580 repair edits, so this branch was assembled in a temporary clean repo copy and then pushed.
  • Focused Jest verification passed locally in the temporary checkout:
    • guidedStudyV3Personal.test.tsx
    • userDatabaseV3.test.ts
    • useGuidedStudyChapterState.test.ts
    • useReviewQueue.test.ts
    • guidedStudyPersonal.test.ts
    • guidedStudyV3Mutations.test.ts
  • TypeScript verification was not reliable in the temp checkout because it did not have its own installed dependencies; CI should be treated as the source of truth for the full branch.

@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v2-evidence-trail branch from d3142e3 to 68e9c9aCompareApril 24, 2026 16:07
@CraigBuckmaster
CraigBuckmaster marked this pull request as ready for review April 24, 2026 16:07
Base automatically changed from codex/guided-study-v2-evidence-trail to masterApril 24, 2026 16:11
StevenBuckmasterand others added 2 commits April 24, 2026 16:12
Import + call site were using a name that no longer exists on services/guidedStudy/review. The exported function is nextIntervalAfter (same signature: (number) => number | null). Fixes the lint / tsc failure on this branch.
@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v3-personal-study-loop branch from 95b3723 to b3db7f8CompareApril 24, 2026 16:12
@github-actions

github-actionsBot commented Apr 24, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3602❌ 03602
Suites✅ 490❌ 0490

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 67.5s

During the v3→master rebase, v3 replayed its commit that was authored
against v1's *original* userMutations.ts. V1's review-comments fix
(which refactored createOrResumeGuidedStudySession and
completeGuidedReviewItem to cleaner patterns) landed in v1's squash
merge to master, but the rebase didn't surface that as a conflict
because v3 rewrote the whole function bodies.
Changes:
- userMutations.ts: restore master's createOrResumeGuidedStudySession
(SELECT-then-INSERT, return lastInsertRowId) — v3's INSERT-OR-IGNORE
pattern is unnecessary given v1's v20 migration's partial unique index.
- userMutations.ts: restore master's completeGuidedReviewItem
(transaction wraps SELECT+UPDATE+INSERT) — matches the test contract
that transaction always opens even for no-op rows.
- StudySessionCTA.tsx: use '·' separator everywhere (master's design
style), not '|'.
- useGuidedStudySession.test.ts: add mock for upsertGuidedStudyQuestion
(the v3 hook correctly calls this new dep; the test just needed the
mock).
v3's intentional additions preserved:
- upsertGuidedStudyQuestion / resolveGuidedStudyQuestion (userMutations)
- mode/currentStep/dueCount props on StudySessionCTA + buildCopy
- chapterId awareness + question persistence in useGuidedStudySession
- migration v21 (guided_study_questions table)
- personal.ts, useGuidedStudyChapterState, MyStudyScreen dashboard
…h master's dot style
Follow-up to 281ed37. v3's own CTA test expected '|' separator that
281ed37 changed to '·' in the component to match master's visual style.
Updating the test rather than the component since '·' is the established
design token separator throughout the app.
@CraigBuckmaster
CraigBuckmaster merged commit 6946d4a into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the codex/guided-study-v3-personal-study-loop branch April 24, 2026 16:40
Sign up for freeto 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.

3 participants

@CraigBuckmaster@StevenBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Add guided study V3 personal study loop by CraigBuckmaster · Pull Request #1602 · CraigBuckmaster/ScriptureDeepDive · GitHub
Skip to content

Add guided study V3 personal study loop - #1602

Merged
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop
Apr 24, 2026
Merged

Add guided study V3 personal study loop#1602
CraigBuckmaster merged 4 commits into
masterfrom
codex/guided-study-v3-personal-study-loop

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Summary

Adds the Guided Study V3 retention and personalization layer on top of PR #1593. This turns guided study into a usable multi-session loop without adding more clutter to the chapter reader.

Changes

  • Upgrades the chapter CTA to switch between Study this chapter, Continue study, and Review insights.
  • Adds a guided_study_questions table plus question persistence and resolution mutations.
  • Adds useGuidedStudyChapterState for chapter-level resume/review state.
  • Reworks useReviewQueue and MyStudyScreen into a personal study dashboard with:
    • next step
    • continue studying
    • due today
    • open questions
    • concepts growing
    • recent takeaways
  • Adds guided-study personalization helpers for next-action recommendations and chapter/step labeling.
  • Adds focused component, hook, DB, service, and mutation tests for the V3 slice.

Notes

  • This PR is intentionally stacked on codex/guided-study-v2-evidence-trail so PR Add guided study V2 evidence trail #1593 can land first.
  • The main local checkout still had unrelated PR Implement guided study session v1 #1580 repair edits, so this branch was assembled in a temporary clean repo copy and then pushed.
  • Focused Jest verification passed locally in the temporary checkout:
    • guidedStudyV3Personal.test.tsx
    • userDatabaseV3.test.ts
    • useGuidedStudyChapterState.test.ts
    • useReviewQueue.test.ts
    • guidedStudyPersonal.test.ts
    • guidedStudyV3Mutations.test.ts
  • TypeScript verification was not reliable in the temp checkout because it did not have its own installed dependencies; CI should be treated as the source of truth for the full branch.

@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v2-evidence-trail branch from d3142e3 to 68e9c9aCompareApril 24, 2026 16:07
@CraigBuckmaster
CraigBuckmaster marked this pull request as ready for review April 24, 2026 16:07
Base automatically changed from codex/guided-study-v2-evidence-trail to masterApril 24, 2026 16:11
StevenBuckmasterand others added 2 commits April 24, 2026 16:12
Import + call site were using a name that no longer exists on services/guidedStudy/review. The exported function is nextIntervalAfter (same signature: (number) => number | null). Fixes the lint / tsc failure on this branch.
@CraigBuckmaster
CraigBuckmasterforce-pushed the codex/guided-study-v3-personal-study-loop branch from 95b3723 to b3db7f8CompareApril 24, 2026 16:12
@github-actions

github-actionsBot commented Apr 24, 2026

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3602❌ 03602
Suites✅ 490❌ 0490

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 67.5s

During the v3→master rebase, v3 replayed its commit that was authored
against v1's *original* userMutations.ts. V1's review-comments fix
(which refactored createOrResumeGuidedStudySession and
completeGuidedReviewItem to cleaner patterns) landed in v1's squash
merge to master, but the rebase didn't surface that as a conflict
because v3 rewrote the whole function bodies.
Changes:
- userMutations.ts: restore master's createOrResumeGuidedStudySession
(SELECT-then-INSERT, return lastInsertRowId) — v3's INSERT-OR-IGNORE
pattern is unnecessary given v1's v20 migration's partial unique index.
- userMutations.ts: restore master's completeGuidedReviewItem
(transaction wraps SELECT+UPDATE+INSERT) — matches the test contract
that transaction always opens even for no-op rows.
- StudySessionCTA.tsx: use '·' separator everywhere (master's design
style), not '|'.
- useGuidedStudySession.test.ts: add mock for upsertGuidedStudyQuestion
(the v3 hook correctly calls this new dep; the test just needed the
mock).
v3's intentional additions preserved:
- upsertGuidedStudyQuestion / resolveGuidedStudyQuestion (userMutations)
- mode/currentStep/dueCount props on StudySessionCTA + buildCopy
- chapterId awareness + question persistence in useGuidedStudySession
- migration v21 (guided_study_questions table)
- personal.ts, useGuidedStudyChapterState, MyStudyScreen dashboard
…h master's dot style
Follow-up to 281ed37. v3's own CTA test expected '|' separator that
281ed37 changed to '·' in the component to match master's visual style.
Updating the test rather than the component since '·' is the established
design token separator throughout the app.
@CraigBuckmaster
CraigBuckmaster merged commit 6946d4a into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the codex/guided-study-v3-personal-study-loop branch April 24, 2026 16:40
Sign up for freeto 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.

3 participants

@CraigBuckmaster@StevenBuckmaster@claude