fix(lint): resolve 15 eslint warnings from amicus v2 merge - #1663

Merged
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2
Apr 24, 2026
Merged

fix(lint): resolve 15 eslint warnings from amicus v2 merge#1663
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Master lint CI (eslint src/ --max-warnings 0) went red after the amicus v2 foundation (#1660) and UI (#1661) merges. This PR takes it back to zero warnings.

Auto-fixable (6)

Ran eslint --fix on the files with import/order warnings:

  • components/guidedStudy/EvidenceTrailRow.tsx
  • hooks/useAmicusContext.ts
  • services/amicus/context.ts
  • services/amicus/studyLaunch.ts (3 issues)

Manual fixes (9)

screens/AmicusThreadScreen.tsx

WarningFix
handleSend is assigned a value but never usedRemoved — dead code superseded by sendWithContext, which adds thread-intelligence persistence
useCallback has unnecessary dependencies: linkedQuestion.question_text and threadContext.open_question_id (on persistThreadIntelligence)Dropped both — linkedQuestion?.question_text is already captured via the derived questionText value on line 91; threadContext?.open_question_id is never referenced in the body
preserve-manual-memoization on toggleQuestionStatus (inferred thread, source thread?.chapter_ref)Changed dep from thread?.chapter_ref to thread to match React Compiler’s inferred dep
set-state-in-effect on void sendWithContext(initialQuery) in the auto-send effectWrapped call in queueMicrotask(...) so the cascading setState in sendWithContext doesn’t run synchronously inside the effect body

hooks/useAmicusChapterStudyThread.ts

WarningFix
set-state-in-effect on setThreadId(null)Moved the null-reset into the async IIFE branch so setState isn’t called synchronously in the effect body

services/amicus/__tests__/studyLaunch.test.ts

WarningFix
4x no-explicit-any on { getParent: () => parent } as any navigation stubsReplaced with as unknown as NavigationProp<ParamListBase> and added the type import from @react-navigation/native

Verification

npx eslint <7 touched files> --max-warnings 0
# Exit: 0

Full-repo eslint src/ timed out locally at 240s without finishing, so relying on CI for end-to-end lint verification.

Master lint CI (eslint src/ --max-warnings 0) was failing with 15
warnings introduced by the amicus v2 foundation and UI merges.
## Auto-fixable (6)
Ran `eslint --fix` for import-order warnings in:
- components/guidedStudy/EvidenceTrailRow.tsx
- hooks/useAmicusContext.ts
- services/amicus/context.ts
- services/amicus/studyLaunch.ts (3 issues)
## Manual fixes (9)
**screens/AmicusThreadScreen.tsx**
- Removed unused `handleSend` callback — dead code superseded by
`sendWithContext` which adds thread-intelligence persistence
- `persistThreadIntelligence` deps: dropped redundant
`linkedQuestion?.question_text` (already captured by the derived
`questionText` value) and the unused `threadContext?.open_question_id`
- `toggleQuestionStatus` deps: changed `thread?.chapter_ref` to
`thread` to match React Compiler's inferred dep and preserve
manual memoization
- Auto-send effect: wrapped `sendWithContext` call in
`queueMicrotask` so the setState it triggers doesn't run
synchronously inside the effect body (react-hooks/set-state-in-effect)
**hooks/useAmicusChapterStudyThread.ts**
- Moved the `setThreadId(null)` reset into the async IIFE branch so
setState isn't called synchronously in the effect body
(react-hooks/set-state-in-effect)
**services/amicus/__tests__/studyLaunch.test.ts**
- Replaced 4 `as any` navigation stub casts with
`as unknown as NavigationProp<ParamListBase>` and added the
type import — silences @typescript-eslint/no-explicit-any
Verified locally: eslint exits 0 on all 7 touched files.
@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3679❌ 03679
Suites✅ 502❌ 0502

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 87.5s

@CraigBuckmaster
CraigBuckmaster merged commit 0ab532f into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the fix/lint-warnings-amicus-v2 branch April 24, 2026 21:35
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.

2 participants

@CraigBuckmaster@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(lint): resolve 15 eslint warnings from amicus v2 merge - #1663

Merged
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2
Apr 24, 2026
Merged

fix(lint): resolve 15 eslint warnings from amicus v2 merge#1663
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Master lint CI (eslint src/ --max-warnings 0) went red after the amicus v2 foundation (#1660) and UI (#1661) merges. This PR takes it back to zero warnings.

Auto-fixable (6)

Ran eslint --fix on the files with import/order warnings:

  • components/guidedStudy/EvidenceTrailRow.tsx
  • hooks/useAmicusContext.ts
  • services/amicus/context.ts
  • services/amicus/studyLaunch.ts (3 issues)

Manual fixes (9)

screens/AmicusThreadScreen.tsx

WarningFix
handleSend is assigned a value but never usedRemoved — dead code superseded by sendWithContext, which adds thread-intelligence persistence
useCallback has unnecessary dependencies: linkedQuestion.question_text and threadContext.open_question_id (on persistThreadIntelligence)Dropped both — linkedQuestion?.question_text is already captured via the derived questionText value on line 91; threadContext?.open_question_id is never referenced in the body
preserve-manual-memoization on toggleQuestionStatus (inferred thread, source thread?.chapter_ref)Changed dep from thread?.chapter_ref to thread to match React Compiler’s inferred dep
set-state-in-effect on void sendWithContext(initialQuery) in the auto-send effectWrapped call in queueMicrotask(...) so the cascading setState in sendWithContext doesn’t run synchronously inside the effect body

hooks/useAmicusChapterStudyThread.ts

WarningFix
set-state-in-effect on setThreadId(null)Moved the null-reset into the async IIFE branch so setState isn’t called synchronously in the effect body

services/amicus/__tests__/studyLaunch.test.ts

WarningFix
4x no-explicit-any on { getParent: () => parent } as any navigation stubsReplaced with as unknown as NavigationProp<ParamListBase> and added the type import from @react-navigation/native

Verification

npx eslint <7 touched files> --max-warnings 0
# Exit: 0

Full-repo eslint src/ timed out locally at 240s without finishing, so relying on CI for end-to-end lint verification.

Master lint CI (eslint src/ --max-warnings 0) was failing with 15
warnings introduced by the amicus v2 foundation and UI merges.
## Auto-fixable (6)
Ran `eslint --fix` for import-order warnings in:
- components/guidedStudy/EvidenceTrailRow.tsx
- hooks/useAmicusContext.ts
- services/amicus/context.ts
- services/amicus/studyLaunch.ts (3 issues)
## Manual fixes (9)
**screens/AmicusThreadScreen.tsx**
- Removed unused `handleSend` callback — dead code superseded by
`sendWithContext` which adds thread-intelligence persistence
- `persistThreadIntelligence` deps: dropped redundant
`linkedQuestion?.question_text` (already captured by the derived
`questionText` value) and the unused `threadContext?.open_question_id`
- `toggleQuestionStatus` deps: changed `thread?.chapter_ref` to
`thread` to match React Compiler's inferred dep and preserve
manual memoization
- Auto-send effect: wrapped `sendWithContext` call in
`queueMicrotask` so the setState it triggers doesn't run
synchronously inside the effect body (react-hooks/set-state-in-effect)
**hooks/useAmicusChapterStudyThread.ts**
- Moved the `setThreadId(null)` reset into the async IIFE branch so
setState isn't called synchronously in the effect body
(react-hooks/set-state-in-effect)
**services/amicus/__tests__/studyLaunch.test.ts**
- Replaced 4 `as any` navigation stub casts with
`as unknown as NavigationProp<ParamListBase>` and added the
type import — silences @typescript-eslint/no-explicit-any
Verified locally: eslint exits 0 on all 7 touched files.
@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3679❌ 03679
Suites✅ 502❌ 0502

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 87.5s

@CraigBuckmaster
CraigBuckmaster merged commit 0ab532f into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the fix/lint-warnings-amicus-v2 branch April 24, 2026 21:35
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.

2 participants

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

fix(lint): resolve 15 eslint warnings from amicus v2 merge - #1663

Merged
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2
Apr 24, 2026
Merged

fix(lint): resolve 15 eslint warnings from amicus v2 merge#1663
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Master lint CI (eslint src/ --max-warnings 0) went red after the amicus v2 foundation (#1660) and UI (#1661) merges. This PR takes it back to zero warnings.

Auto-fixable (6)

Ran eslint --fix on the files with import/order warnings:

  • components/guidedStudy/EvidenceTrailRow.tsx
  • hooks/useAmicusContext.ts
  • services/amicus/context.ts
  • services/amicus/studyLaunch.ts (3 issues)

Manual fixes (9)

screens/AmicusThreadScreen.tsx

WarningFix
handleSend is assigned a value but never usedRemoved — dead code superseded by sendWithContext, which adds thread-intelligence persistence
useCallback has unnecessary dependencies: linkedQuestion.question_text and threadContext.open_question_id (on persistThreadIntelligence)Dropped both — linkedQuestion?.question_text is already captured via the derived questionText value on line 91; threadContext?.open_question_id is never referenced in the body
preserve-manual-memoization on toggleQuestionStatus (inferred thread, source thread?.chapter_ref)Changed dep from thread?.chapter_ref to thread to match React Compiler’s inferred dep
set-state-in-effect on void sendWithContext(initialQuery) in the auto-send effectWrapped call in queueMicrotask(...) so the cascading setState in sendWithContext doesn’t run synchronously inside the effect body

hooks/useAmicusChapterStudyThread.ts

WarningFix
set-state-in-effect on setThreadId(null)Moved the null-reset into the async IIFE branch so setState isn’t called synchronously in the effect body

services/amicus/__tests__/studyLaunch.test.ts

WarningFix
4x no-explicit-any on { getParent: () => parent } as any navigation stubsReplaced with as unknown as NavigationProp<ParamListBase> and added the type import from @react-navigation/native

Verification

npx eslint <7 touched files> --max-warnings 0
# Exit: 0

Full-repo eslint src/ timed out locally at 240s without finishing, so relying on CI for end-to-end lint verification.

Master lint CI (eslint src/ --max-warnings 0) was failing with 15
warnings introduced by the amicus v2 foundation and UI merges.
## Auto-fixable (6)
Ran `eslint --fix` for import-order warnings in:
- components/guidedStudy/EvidenceTrailRow.tsx
- hooks/useAmicusContext.ts
- services/amicus/context.ts
- services/amicus/studyLaunch.ts (3 issues)
## Manual fixes (9)
**screens/AmicusThreadScreen.tsx**
- Removed unused `handleSend` callback — dead code superseded by
`sendWithContext` which adds thread-intelligence persistence
- `persistThreadIntelligence` deps: dropped redundant
`linkedQuestion?.question_text` (already captured by the derived
`questionText` value) and the unused `threadContext?.open_question_id`
- `toggleQuestionStatus` deps: changed `thread?.chapter_ref` to
`thread` to match React Compiler's inferred dep and preserve
manual memoization
- Auto-send effect: wrapped `sendWithContext` call in
`queueMicrotask` so the setState it triggers doesn't run
synchronously inside the effect body (react-hooks/set-state-in-effect)
**hooks/useAmicusChapterStudyThread.ts**
- Moved the `setThreadId(null)` reset into the async IIFE branch so
setState isn't called synchronously in the effect body
(react-hooks/set-state-in-effect)
**services/amicus/__tests__/studyLaunch.test.ts**
- Replaced 4 `as any` navigation stub casts with
`as unknown as NavigationProp<ParamListBase>` and added the
type import — silences @typescript-eslint/no-explicit-any
Verified locally: eslint exits 0 on all 7 touched files.
@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3679❌ 03679
Suites✅ 502❌ 0502

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 87.5s

@CraigBuckmaster
CraigBuckmaster merged commit 0ab532f into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the fix/lint-warnings-amicus-v2 branch April 24, 2026 21:35
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.

2 participants

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

fix(lint): resolve 15 eslint warnings from amicus v2 merge - #1663

Merged
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2
Apr 24, 2026
Merged

fix(lint): resolve 15 eslint warnings from amicus v2 merge#1663
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Master lint CI (eslint src/ --max-warnings 0) went red after the amicus v2 foundation (#1660) and UI (#1661) merges. This PR takes it back to zero warnings.

Auto-fixable (6)

Ran eslint --fix on the files with import/order warnings:

  • components/guidedStudy/EvidenceTrailRow.tsx
  • hooks/useAmicusContext.ts
  • services/amicus/context.ts
  • services/amicus/studyLaunch.ts (3 issues)

Manual fixes (9)

screens/AmicusThreadScreen.tsx

WarningFix
handleSend is assigned a value but never usedRemoved — dead code superseded by sendWithContext, which adds thread-intelligence persistence
useCallback has unnecessary dependencies: linkedQuestion.question_text and threadContext.open_question_id (on persistThreadIntelligence)Dropped both — linkedQuestion?.question_text is already captured via the derived questionText value on line 91; threadContext?.open_question_id is never referenced in the body
preserve-manual-memoization on toggleQuestionStatus (inferred thread, source thread?.chapter_ref)Changed dep from thread?.chapter_ref to thread to match React Compiler’s inferred dep
set-state-in-effect on void sendWithContext(initialQuery) in the auto-send effectWrapped call in queueMicrotask(...) so the cascading setState in sendWithContext doesn’t run synchronously inside the effect body

hooks/useAmicusChapterStudyThread.ts

WarningFix
set-state-in-effect on setThreadId(null)Moved the null-reset into the async IIFE branch so setState isn’t called synchronously in the effect body

services/amicus/__tests__/studyLaunch.test.ts

WarningFix
4x no-explicit-any on { getParent: () => parent } as any navigation stubsReplaced with as unknown as NavigationProp<ParamListBase> and added the type import from @react-navigation/native

Verification

npx eslint <7 touched files> --max-warnings 0
# Exit: 0

Full-repo eslint src/ timed out locally at 240s without finishing, so relying on CI for end-to-end lint verification.

Master lint CI (eslint src/ --max-warnings 0) was failing with 15
warnings introduced by the amicus v2 foundation and UI merges.
## Auto-fixable (6)
Ran `eslint --fix` for import-order warnings in:
- components/guidedStudy/EvidenceTrailRow.tsx
- hooks/useAmicusContext.ts
- services/amicus/context.ts
- services/amicus/studyLaunch.ts (3 issues)
## Manual fixes (9)
**screens/AmicusThreadScreen.tsx**
- Removed unused `handleSend` callback — dead code superseded by
`sendWithContext` which adds thread-intelligence persistence
- `persistThreadIntelligence` deps: dropped redundant
`linkedQuestion?.question_text` (already captured by the derived
`questionText` value) and the unused `threadContext?.open_question_id`
- `toggleQuestionStatus` deps: changed `thread?.chapter_ref` to
`thread` to match React Compiler's inferred dep and preserve
manual memoization
- Auto-send effect: wrapped `sendWithContext` call in
`queueMicrotask` so the setState it triggers doesn't run
synchronously inside the effect body (react-hooks/set-state-in-effect)
**hooks/useAmicusChapterStudyThread.ts**
- Moved the `setThreadId(null)` reset into the async IIFE branch so
setState isn't called synchronously in the effect body
(react-hooks/set-state-in-effect)
**services/amicus/__tests__/studyLaunch.test.ts**
- Replaced 4 `as any` navigation stub casts with
`as unknown as NavigationProp<ParamListBase>` and added the
type import — silences @typescript-eslint/no-explicit-any
Verified locally: eslint exits 0 on all 7 touched files.
@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3679❌ 03679
Suites✅ 502❌ 0502

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 87.5s

@CraigBuckmaster
CraigBuckmaster merged commit 0ab532f into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the fix/lint-warnings-amicus-v2 branch April 24, 2026 21:35
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.

2 participants

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

fix(lint): resolve 15 eslint warnings from amicus v2 merge - #1663

Merged
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2
Apr 24, 2026
Merged

fix(lint): resolve 15 eslint warnings from amicus v2 merge#1663
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Master lint CI (eslint src/ --max-warnings 0) went red after the amicus v2 foundation (#1660) and UI (#1661) merges. This PR takes it back to zero warnings.

Auto-fixable (6)

Ran eslint --fix on the files with import/order warnings:

  • components/guidedStudy/EvidenceTrailRow.tsx
  • hooks/useAmicusContext.ts
  • services/amicus/context.ts
  • services/amicus/studyLaunch.ts (3 issues)

Manual fixes (9)

screens/AmicusThreadScreen.tsx

WarningFix
handleSend is assigned a value but never usedRemoved — dead code superseded by sendWithContext, which adds thread-intelligence persistence
useCallback has unnecessary dependencies: linkedQuestion.question_text and threadContext.open_question_id (on persistThreadIntelligence)Dropped both — linkedQuestion?.question_text is already captured via the derived questionText value on line 91; threadContext?.open_question_id is never referenced in the body
preserve-manual-memoization on toggleQuestionStatus (inferred thread, source thread?.chapter_ref)Changed dep from thread?.chapter_ref to thread to match React Compiler’s inferred dep
set-state-in-effect on void sendWithContext(initialQuery) in the auto-send effectWrapped call in queueMicrotask(...) so the cascading setState in sendWithContext doesn’t run synchronously inside the effect body

hooks/useAmicusChapterStudyThread.ts

WarningFix
set-state-in-effect on setThreadId(null)Moved the null-reset into the async IIFE branch so setState isn’t called synchronously in the effect body

services/amicus/__tests__/studyLaunch.test.ts

WarningFix
4x no-explicit-any on { getParent: () => parent } as any navigation stubsReplaced with as unknown as NavigationProp<ParamListBase> and added the type import from @react-navigation/native

Verification

npx eslint <7 touched files> --max-warnings 0
# Exit: 0

Full-repo eslint src/ timed out locally at 240s without finishing, so relying on CI for end-to-end lint verification.

Master lint CI (eslint src/ --max-warnings 0) was failing with 15
warnings introduced by the amicus v2 foundation and UI merges.
## Auto-fixable (6)
Ran `eslint --fix` for import-order warnings in:
- components/guidedStudy/EvidenceTrailRow.tsx
- hooks/useAmicusContext.ts
- services/amicus/context.ts
- services/amicus/studyLaunch.ts (3 issues)
## Manual fixes (9)
**screens/AmicusThreadScreen.tsx**
- Removed unused `handleSend` callback — dead code superseded by
`sendWithContext` which adds thread-intelligence persistence
- `persistThreadIntelligence` deps: dropped redundant
`linkedQuestion?.question_text` (already captured by the derived
`questionText` value) and the unused `threadContext?.open_question_id`
- `toggleQuestionStatus` deps: changed `thread?.chapter_ref` to
`thread` to match React Compiler's inferred dep and preserve
manual memoization
- Auto-send effect: wrapped `sendWithContext` call in
`queueMicrotask` so the setState it triggers doesn't run
synchronously inside the effect body (react-hooks/set-state-in-effect)
**hooks/useAmicusChapterStudyThread.ts**
- Moved the `setThreadId(null)` reset into the async IIFE branch so
setState isn't called synchronously in the effect body
(react-hooks/set-state-in-effect)
**services/amicus/__tests__/studyLaunch.test.ts**
- Replaced 4 `as any` navigation stub casts with
`as unknown as NavigationProp<ParamListBase>` and added the
type import — silences @typescript-eslint/no-explicit-any
Verified locally: eslint exits 0 on all 7 touched files.
@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3679❌ 03679
Suites✅ 502❌ 0502

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 87.5s

@CraigBuckmaster
CraigBuckmaster merged commit 0ab532f into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the fix/lint-warnings-amicus-v2 branch April 24, 2026 21:35
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.

2 participants

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

fix(lint): resolve 15 eslint warnings from amicus v2 merge - #1663

Merged
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2
Apr 24, 2026
Merged

fix(lint): resolve 15 eslint warnings from amicus v2 merge#1663
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Master lint CI (eslint src/ --max-warnings 0) went red after the amicus v2 foundation (#1660) and UI (#1661) merges. This PR takes it back to zero warnings.

Auto-fixable (6)

Ran eslint --fix on the files with import/order warnings:

  • components/guidedStudy/EvidenceTrailRow.tsx
  • hooks/useAmicusContext.ts
  • services/amicus/context.ts
  • services/amicus/studyLaunch.ts (3 issues)

Manual fixes (9)

screens/AmicusThreadScreen.tsx

WarningFix
handleSend is assigned a value but never usedRemoved — dead code superseded by sendWithContext, which adds thread-intelligence persistence
useCallback has unnecessary dependencies: linkedQuestion.question_text and threadContext.open_question_id (on persistThreadIntelligence)Dropped both — linkedQuestion?.question_text is already captured via the derived questionText value on line 91; threadContext?.open_question_id is never referenced in the body
preserve-manual-memoization on toggleQuestionStatus (inferred thread, source thread?.chapter_ref)Changed dep from thread?.chapter_ref to thread to match React Compiler’s inferred dep
set-state-in-effect on void sendWithContext(initialQuery) in the auto-send effectWrapped call in queueMicrotask(...) so the cascading setState in sendWithContext doesn’t run synchronously inside the effect body

hooks/useAmicusChapterStudyThread.ts

WarningFix
set-state-in-effect on setThreadId(null)Moved the null-reset into the async IIFE branch so setState isn’t called synchronously in the effect body

services/amicus/__tests__/studyLaunch.test.ts

WarningFix
4x no-explicit-any on { getParent: () => parent } as any navigation stubsReplaced with as unknown as NavigationProp<ParamListBase> and added the type import from @react-navigation/native

Verification

npx eslint <7 touched files> --max-warnings 0
# Exit: 0

Full-repo eslint src/ timed out locally at 240s without finishing, so relying on CI for end-to-end lint verification.

Master lint CI (eslint src/ --max-warnings 0) was failing with 15
warnings introduced by the amicus v2 foundation and UI merges.
## Auto-fixable (6)
Ran `eslint --fix` for import-order warnings in:
- components/guidedStudy/EvidenceTrailRow.tsx
- hooks/useAmicusContext.ts
- services/amicus/context.ts
- services/amicus/studyLaunch.ts (3 issues)
## Manual fixes (9)
**screens/AmicusThreadScreen.tsx**
- Removed unused `handleSend` callback — dead code superseded by
`sendWithContext` which adds thread-intelligence persistence
- `persistThreadIntelligence` deps: dropped redundant
`linkedQuestion?.question_text` (already captured by the derived
`questionText` value) and the unused `threadContext?.open_question_id`
- `toggleQuestionStatus` deps: changed `thread?.chapter_ref` to
`thread` to match React Compiler's inferred dep and preserve
manual memoization
- Auto-send effect: wrapped `sendWithContext` call in
`queueMicrotask` so the setState it triggers doesn't run
synchronously inside the effect body (react-hooks/set-state-in-effect)
**hooks/useAmicusChapterStudyThread.ts**
- Moved the `setThreadId(null)` reset into the async IIFE branch so
setState isn't called synchronously in the effect body
(react-hooks/set-state-in-effect)
**services/amicus/__tests__/studyLaunch.test.ts**
- Replaced 4 `as any` navigation stub casts with
`as unknown as NavigationProp<ParamListBase>` and added the
type import — silences @typescript-eslint/no-explicit-any
Verified locally: eslint exits 0 on all 7 touched files.
@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3679❌ 03679
Suites✅ 502❌ 0502

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 87.5s

@CraigBuckmaster
CraigBuckmaster merged commit 0ab532f into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the fix/lint-warnings-amicus-v2 branch April 24, 2026 21:35
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.

2 participants

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

fix(lint): resolve 15 eslint warnings from amicus v2 merge - #1663

Merged
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2
Apr 24, 2026
Merged

fix(lint): resolve 15 eslint warnings from amicus v2 merge#1663
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Master lint CI (eslint src/ --max-warnings 0) went red after the amicus v2 foundation (#1660) and UI (#1661) merges. This PR takes it back to zero warnings.

Auto-fixable (6)

Ran eslint --fix on the files with import/order warnings:

  • components/guidedStudy/EvidenceTrailRow.tsx
  • hooks/useAmicusContext.ts
  • services/amicus/context.ts
  • services/amicus/studyLaunch.ts (3 issues)

Manual fixes (9)

screens/AmicusThreadScreen.tsx

WarningFix
handleSend is assigned a value but never usedRemoved — dead code superseded by sendWithContext, which adds thread-intelligence persistence
useCallback has unnecessary dependencies: linkedQuestion.question_text and threadContext.open_question_id (on persistThreadIntelligence)Dropped both — linkedQuestion?.question_text is already captured via the derived questionText value on line 91; threadContext?.open_question_id is never referenced in the body
preserve-manual-memoization on toggleQuestionStatus (inferred thread, source thread?.chapter_ref)Changed dep from thread?.chapter_ref to thread to match React Compiler’s inferred dep
set-state-in-effect on void sendWithContext(initialQuery) in the auto-send effectWrapped call in queueMicrotask(...) so the cascading setState in sendWithContext doesn’t run synchronously inside the effect body

hooks/useAmicusChapterStudyThread.ts

WarningFix
set-state-in-effect on setThreadId(null)Moved the null-reset into the async IIFE branch so setState isn’t called synchronously in the effect body

services/amicus/__tests__/studyLaunch.test.ts

WarningFix
4x no-explicit-any on { getParent: () => parent } as any navigation stubsReplaced with as unknown as NavigationProp<ParamListBase> and added the type import from @react-navigation/native

Verification

npx eslint <7 touched files> --max-warnings 0
# Exit: 0

Full-repo eslint src/ timed out locally at 240s without finishing, so relying on CI for end-to-end lint verification.

Master lint CI (eslint src/ --max-warnings 0) was failing with 15
warnings introduced by the amicus v2 foundation and UI merges.
## Auto-fixable (6)
Ran `eslint --fix` for import-order warnings in:
- components/guidedStudy/EvidenceTrailRow.tsx
- hooks/useAmicusContext.ts
- services/amicus/context.ts
- services/amicus/studyLaunch.ts (3 issues)
## Manual fixes (9)
**screens/AmicusThreadScreen.tsx**
- Removed unused `handleSend` callback — dead code superseded by
`sendWithContext` which adds thread-intelligence persistence
- `persistThreadIntelligence` deps: dropped redundant
`linkedQuestion?.question_text` (already captured by the derived
`questionText` value) and the unused `threadContext?.open_question_id`
- `toggleQuestionStatus` deps: changed `thread?.chapter_ref` to
`thread` to match React Compiler's inferred dep and preserve
manual memoization
- Auto-send effect: wrapped `sendWithContext` call in
`queueMicrotask` so the setState it triggers doesn't run
synchronously inside the effect body (react-hooks/set-state-in-effect)
**hooks/useAmicusChapterStudyThread.ts**
- Moved the `setThreadId(null)` reset into the async IIFE branch so
setState isn't called synchronously in the effect body
(react-hooks/set-state-in-effect)
**services/amicus/__tests__/studyLaunch.test.ts**
- Replaced 4 `as any` navigation stub casts with
`as unknown as NavigationProp<ParamListBase>` and added the
type import — silences @typescript-eslint/no-explicit-any
Verified locally: eslint exits 0 on all 7 touched files.
@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3679❌ 03679
Suites✅ 502❌ 0502

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 87.5s

@CraigBuckmaster
CraigBuckmaster merged commit 0ab532f into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the fix/lint-warnings-amicus-v2 branch April 24, 2026 21:35
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.

2 participants

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

fix(lint): resolve 15 eslint warnings from amicus v2 merge - #1663

Merged
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2
Apr 24, 2026
Merged

fix(lint): resolve 15 eslint warnings from amicus v2 merge#1663
CraigBuckmaster merged 1 commit into
masterfrom
fix/lint-warnings-amicus-v2

Conversation

@CraigBuckmaster

Copy link
Copy Markdown
Owner

Master lint CI (eslint src/ --max-warnings 0) went red after the amicus v2 foundation (#1660) and UI (#1661) merges. This PR takes it back to zero warnings.

Auto-fixable (6)

Ran eslint --fix on the files with import/order warnings:

  • components/guidedStudy/EvidenceTrailRow.tsx
  • hooks/useAmicusContext.ts
  • services/amicus/context.ts
  • services/amicus/studyLaunch.ts (3 issues)

Manual fixes (9)

screens/AmicusThreadScreen.tsx

WarningFix
handleSend is assigned a value but never usedRemoved — dead code superseded by sendWithContext, which adds thread-intelligence persistence
useCallback has unnecessary dependencies: linkedQuestion.question_text and threadContext.open_question_id (on persistThreadIntelligence)Dropped both — linkedQuestion?.question_text is already captured via the derived questionText value on line 91; threadContext?.open_question_id is never referenced in the body
preserve-manual-memoization on toggleQuestionStatus (inferred thread, source thread?.chapter_ref)Changed dep from thread?.chapter_ref to thread to match React Compiler’s inferred dep
set-state-in-effect on void sendWithContext(initialQuery) in the auto-send effectWrapped call in queueMicrotask(...) so the cascading setState in sendWithContext doesn’t run synchronously inside the effect body

hooks/useAmicusChapterStudyThread.ts

WarningFix
set-state-in-effect on setThreadId(null)Moved the null-reset into the async IIFE branch so setState isn’t called synchronously in the effect body

services/amicus/__tests__/studyLaunch.test.ts

WarningFix
4x no-explicit-any on { getParent: () => parent } as any navigation stubsReplaced with as unknown as NavigationProp<ParamListBase> and added the type import from @react-navigation/native

Verification

npx eslint <7 touched files> --max-warnings 0
# Exit: 0

Full-repo eslint src/ timed out locally at 240s without finishing, so relying on CI for end-to-end lint verification.

Master lint CI (eslint src/ --max-warnings 0) was failing with 15
warnings introduced by the amicus v2 foundation and UI merges.
## Auto-fixable (6)
Ran `eslint --fix` for import-order warnings in:
- components/guidedStudy/EvidenceTrailRow.tsx
- hooks/useAmicusContext.ts
- services/amicus/context.ts
- services/amicus/studyLaunch.ts (3 issues)
## Manual fixes (9)
**screens/AmicusThreadScreen.tsx**
- Removed unused `handleSend` callback — dead code superseded by
`sendWithContext` which adds thread-intelligence persistence
- `persistThreadIntelligence` deps: dropped redundant
`linkedQuestion?.question_text` (already captured by the derived
`questionText` value) and the unused `threadContext?.open_question_id`
- `toggleQuestionStatus` deps: changed `thread?.chapter_ref` to
`thread` to match React Compiler's inferred dep and preserve
manual memoization
- Auto-send effect: wrapped `sendWithContext` call in
`queueMicrotask` so the setState it triggers doesn't run
synchronously inside the effect body (react-hooks/set-state-in-effect)
**hooks/useAmicusChapterStudyThread.ts**
- Moved the `setThreadId(null)` reset into the async IIFE branch so
setState isn't called synchronously in the effect body
(react-hooks/set-state-in-effect)
**services/amicus/__tests__/studyLaunch.test.ts**
- Replaced 4 `as any` navigation stub casts with
`as unknown as NavigationProp<ParamListBase>` and added the
type import — silences @typescript-eslint/no-explicit-any
Verified locally: eslint exits 0 on all 7 touched files.
@github-actions

Copy link
Copy Markdown

Test Results

✅ All tests passed

PassedFailedTotal
Tests✅ 3679❌ 03679
Suites✅ 502❌ 0502

Coverage

StatementsBranchesFunctionsLines

⏱️ Duration: 87.5s

@CraigBuckmaster
CraigBuckmaster merged commit 0ab532f into masterApr 24, 2026
6 checks passed
@CraigBuckmaster
CraigBuckmaster deleted the fix/lint-warnings-amicus-v2 branch April 24, 2026 21:35
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.

2 participants

@CraigBuckmaster@claude