Removed private channels from search - #272

Merged
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels
Jul 30, 2026
Merged

Removed private channels from search#272
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels

Conversation

@sfreeman422

Copy link
Copy Markdown
Collaborator

No description provided.

CopilotAI review requested due to automatic review settings July 29, 2026 23:56

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR changes the backend search behavior for messages by shifting channel filtering responsibility from the controller to the persistence layer and tightening the SQL joins to require a slack_channel match.

Changes:

  • Removed the controller-side filter that previously dropped non-public channel IDs from /messages results.
  • Updated the search SQL to remove the message.channel LIKE 'C%' condition, switch slack_channel from LEFT JOIN to INNER JOIN, and select slack_channel.name directly as channelName.
  • Updated/added unit tests to assert the new SQL join and controller pass-through behavior.

Reviewed changes

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

FileDescription
packages/backend/src/search/search.persistence.service.tsAlters SQL construction for message search (conditions, join type, selected channelName).
packages/backend/src/search/search.persistence.service.spec.tsUpdates assertions and adds a test reflecting the new SQL join expectations.
packages/backend/src/search/search.controller.tsRemoves controller-side filtering of messages by channel ID prefix.
packages/backend/src/search/search.controller.spec.tsUpdates test expectations to match controller pass-through behavior.
Comments suppressed due to low confidence (2)

packages/backend/src/search/search.controller.spec.ts:74

  • This test now asserts that private-channel (G…) and DM (D…) messages are returned unchanged. That contradicts the PR title (“Removed private channels from search”) and removes regression coverage that previously ensured only public channels were returned. Either restore an assertion that only public-channel messages are returned, or update the PR title/requirements to reflect the new behavior.
 it('returns messages exactly as provided by persistence', async () => {
searchMessagesMock.mockResolvedValue({
messages: [
{ id: 1, message: 'public', name: 'alice', channel: 'C111' },
{ id: 2, message: 'private', name: 'bob', channel: 'G222' },

packages/backend/src/search/search.persistence.service.spec.ts:97

  • This new test enforces that the query requires a matching slack_channel row via INNER JOIN. That requirement can unintentionally hide valid messages if slack_channel is not fully populated (and it still doesn't guarantee private channels are excluded). If the intent is privacy (exclude G…/D…), add a test that asserts a public-channel filter and consider keeping slack_channel as a LEFT JOIN with COALESCE for resilience.
 it('requires channel to exist in slack_channel via INNER JOIN', async () => {
query.mockResolvedValueOnce([{ total: 0 }]).mockResolvedValueOnce([]);
await service.searchMessages({ teamId: 'T1' });

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

Comment threadpackages/backend/src/search/search.persistence.service.ts
Comment threadpackages/backend/src/search/search.controller.ts
Comment threadpackages/backend/src/search/search.persistence.service.ts
@sfreeman422
sfreeman422 merged commit 3264aa6 into masterJul 30, 2026
11 checks passed
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

@sfreeman422
, '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

Removed private channels from search - #272

Merged
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels
Jul 30, 2026
Merged

Removed private channels from search#272
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels

Conversation

@sfreeman422

Copy link
Copy Markdown
Collaborator

No description provided.

CopilotAI review requested due to automatic review settings July 29, 2026 23:56

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR changes the backend search behavior for messages by shifting channel filtering responsibility from the controller to the persistence layer and tightening the SQL joins to require a slack_channel match.

Changes:

  • Removed the controller-side filter that previously dropped non-public channel IDs from /messages results.
  • Updated the search SQL to remove the message.channel LIKE 'C%' condition, switch slack_channel from LEFT JOIN to INNER JOIN, and select slack_channel.name directly as channelName.
  • Updated/added unit tests to assert the new SQL join and controller pass-through behavior.

Reviewed changes

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

FileDescription
packages/backend/src/search/search.persistence.service.tsAlters SQL construction for message search (conditions, join type, selected channelName).
packages/backend/src/search/search.persistence.service.spec.tsUpdates assertions and adds a test reflecting the new SQL join expectations.
packages/backend/src/search/search.controller.tsRemoves controller-side filtering of messages by channel ID prefix.
packages/backend/src/search/search.controller.spec.tsUpdates test expectations to match controller pass-through behavior.
Comments suppressed due to low confidence (2)

packages/backend/src/search/search.controller.spec.ts:74

  • This test now asserts that private-channel (G…) and DM (D…) messages are returned unchanged. That contradicts the PR title (“Removed private channels from search”) and removes regression coverage that previously ensured only public channels were returned. Either restore an assertion that only public-channel messages are returned, or update the PR title/requirements to reflect the new behavior.
 it('returns messages exactly as provided by persistence', async () => {
searchMessagesMock.mockResolvedValue({
messages: [
{ id: 1, message: 'public', name: 'alice', channel: 'C111' },
{ id: 2, message: 'private', name: 'bob', channel: 'G222' },

packages/backend/src/search/search.persistence.service.spec.ts:97

  • This new test enforces that the query requires a matching slack_channel row via INNER JOIN. That requirement can unintentionally hide valid messages if slack_channel is not fully populated (and it still doesn't guarantee private channels are excluded). If the intent is privacy (exclude G…/D…), add a test that asserts a public-channel filter and consider keeping slack_channel as a LEFT JOIN with COALESCE for resilience.
 it('requires channel to exist in slack_channel via INNER JOIN', async () => {
query.mockResolvedValueOnce([{ total: 0 }]).mockResolvedValueOnce([]);
await service.searchMessages({ teamId: 'T1' });

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

Comment threadpackages/backend/src/search/search.persistence.service.ts
Comment threadpackages/backend/src/search/search.controller.ts
Comment threadpackages/backend/src/search/search.persistence.service.ts
@sfreeman422
sfreeman422 merged commit 3264aa6 into masterJul 30, 2026
11 checks passed
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

@sfreeman422
, '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

Removed private channels from search - #272

Merged
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels
Jul 30, 2026
Merged

Removed private channels from search#272
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels

Conversation

@sfreeman422

Copy link
Copy Markdown
Collaborator

No description provided.

CopilotAI review requested due to automatic review settings July 29, 2026 23:56

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR changes the backend search behavior for messages by shifting channel filtering responsibility from the controller to the persistence layer and tightening the SQL joins to require a slack_channel match.

Changes:

  • Removed the controller-side filter that previously dropped non-public channel IDs from /messages results.
  • Updated the search SQL to remove the message.channel LIKE 'C%' condition, switch slack_channel from LEFT JOIN to INNER JOIN, and select slack_channel.name directly as channelName.
  • Updated/added unit tests to assert the new SQL join and controller pass-through behavior.

Reviewed changes

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

FileDescription
packages/backend/src/search/search.persistence.service.tsAlters SQL construction for message search (conditions, join type, selected channelName).
packages/backend/src/search/search.persistence.service.spec.tsUpdates assertions and adds a test reflecting the new SQL join expectations.
packages/backend/src/search/search.controller.tsRemoves controller-side filtering of messages by channel ID prefix.
packages/backend/src/search/search.controller.spec.tsUpdates test expectations to match controller pass-through behavior.
Comments suppressed due to low confidence (2)

packages/backend/src/search/search.controller.spec.ts:74

  • This test now asserts that private-channel (G…) and DM (D…) messages are returned unchanged. That contradicts the PR title (“Removed private channels from search”) and removes regression coverage that previously ensured only public channels were returned. Either restore an assertion that only public-channel messages are returned, or update the PR title/requirements to reflect the new behavior.
 it('returns messages exactly as provided by persistence', async () => {
searchMessagesMock.mockResolvedValue({
messages: [
{ id: 1, message: 'public', name: 'alice', channel: 'C111' },
{ id: 2, message: 'private', name: 'bob', channel: 'G222' },

packages/backend/src/search/search.persistence.service.spec.ts:97

  • This new test enforces that the query requires a matching slack_channel row via INNER JOIN. That requirement can unintentionally hide valid messages if slack_channel is not fully populated (and it still doesn't guarantee private channels are excluded). If the intent is privacy (exclude G…/D…), add a test that asserts a public-channel filter and consider keeping slack_channel as a LEFT JOIN with COALESCE for resilience.
 it('requires channel to exist in slack_channel via INNER JOIN', async () => {
query.mockResolvedValueOnce([{ total: 0 }]).mockResolvedValueOnce([]);
await service.searchMessages({ teamId: 'T1' });

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

Comment threadpackages/backend/src/search/search.persistence.service.ts
Comment threadpackages/backend/src/search/search.controller.ts
Comment threadpackages/backend/src/search/search.persistence.service.ts
@sfreeman422
sfreeman422 merged commit 3264aa6 into masterJul 30, 2026
11 checks passed
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

@sfreeman422
, '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

Removed private channels from search - #272

Merged
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels
Jul 30, 2026
Merged

Removed private channels from search#272
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels

Conversation

@sfreeman422

Copy link
Copy Markdown
Collaborator

No description provided.

CopilotAI review requested due to automatic review settings July 29, 2026 23:56

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR changes the backend search behavior for messages by shifting channel filtering responsibility from the controller to the persistence layer and tightening the SQL joins to require a slack_channel match.

Changes:

  • Removed the controller-side filter that previously dropped non-public channel IDs from /messages results.
  • Updated the search SQL to remove the message.channel LIKE 'C%' condition, switch slack_channel from LEFT JOIN to INNER JOIN, and select slack_channel.name directly as channelName.
  • Updated/added unit tests to assert the new SQL join and controller pass-through behavior.

Reviewed changes

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

FileDescription
packages/backend/src/search/search.persistence.service.tsAlters SQL construction for message search (conditions, join type, selected channelName).
packages/backend/src/search/search.persistence.service.spec.tsUpdates assertions and adds a test reflecting the new SQL join expectations.
packages/backend/src/search/search.controller.tsRemoves controller-side filtering of messages by channel ID prefix.
packages/backend/src/search/search.controller.spec.tsUpdates test expectations to match controller pass-through behavior.
Comments suppressed due to low confidence (2)

packages/backend/src/search/search.controller.spec.ts:74

  • This test now asserts that private-channel (G…) and DM (D…) messages are returned unchanged. That contradicts the PR title (“Removed private channels from search”) and removes regression coverage that previously ensured only public channels were returned. Either restore an assertion that only public-channel messages are returned, or update the PR title/requirements to reflect the new behavior.
 it('returns messages exactly as provided by persistence', async () => {
searchMessagesMock.mockResolvedValue({
messages: [
{ id: 1, message: 'public', name: 'alice', channel: 'C111' },
{ id: 2, message: 'private', name: 'bob', channel: 'G222' },

packages/backend/src/search/search.persistence.service.spec.ts:97

  • This new test enforces that the query requires a matching slack_channel row via INNER JOIN. That requirement can unintentionally hide valid messages if slack_channel is not fully populated (and it still doesn't guarantee private channels are excluded). If the intent is privacy (exclude G…/D…), add a test that asserts a public-channel filter and consider keeping slack_channel as a LEFT JOIN with COALESCE for resilience.
 it('requires channel to exist in slack_channel via INNER JOIN', async () => {
query.mockResolvedValueOnce([{ total: 0 }]).mockResolvedValueOnce([]);
await service.searchMessages({ teamId: 'T1' });

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

Comment threadpackages/backend/src/search/search.persistence.service.ts
Comment threadpackages/backend/src/search/search.controller.ts
Comment threadpackages/backend/src/search/search.persistence.service.ts
@sfreeman422
sfreeman422 merged commit 3264aa6 into masterJul 30, 2026
11 checks passed
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

@sfreeman422
, '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

Removed private channels from search - #272

Merged
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels
Jul 30, 2026
Merged

Removed private channels from search#272
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels

Conversation

@sfreeman422

Copy link
Copy Markdown
Collaborator

No description provided.

CopilotAI review requested due to automatic review settings July 29, 2026 23:56

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR changes the backend search behavior for messages by shifting channel filtering responsibility from the controller to the persistence layer and tightening the SQL joins to require a slack_channel match.

Changes:

  • Removed the controller-side filter that previously dropped non-public channel IDs from /messages results.
  • Updated the search SQL to remove the message.channel LIKE 'C%' condition, switch slack_channel from LEFT JOIN to INNER JOIN, and select slack_channel.name directly as channelName.
  • Updated/added unit tests to assert the new SQL join and controller pass-through behavior.

Reviewed changes

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

FileDescription
packages/backend/src/search/search.persistence.service.tsAlters SQL construction for message search (conditions, join type, selected channelName).
packages/backend/src/search/search.persistence.service.spec.tsUpdates assertions and adds a test reflecting the new SQL join expectations.
packages/backend/src/search/search.controller.tsRemoves controller-side filtering of messages by channel ID prefix.
packages/backend/src/search/search.controller.spec.tsUpdates test expectations to match controller pass-through behavior.
Comments suppressed due to low confidence (2)

packages/backend/src/search/search.controller.spec.ts:74

  • This test now asserts that private-channel (G…) and DM (D…) messages are returned unchanged. That contradicts the PR title (“Removed private channels from search”) and removes regression coverage that previously ensured only public channels were returned. Either restore an assertion that only public-channel messages are returned, or update the PR title/requirements to reflect the new behavior.
 it('returns messages exactly as provided by persistence', async () => {
searchMessagesMock.mockResolvedValue({
messages: [
{ id: 1, message: 'public', name: 'alice', channel: 'C111' },
{ id: 2, message: 'private', name: 'bob', channel: 'G222' },

packages/backend/src/search/search.persistence.service.spec.ts:97

  • This new test enforces that the query requires a matching slack_channel row via INNER JOIN. That requirement can unintentionally hide valid messages if slack_channel is not fully populated (and it still doesn't guarantee private channels are excluded). If the intent is privacy (exclude G…/D…), add a test that asserts a public-channel filter and consider keeping slack_channel as a LEFT JOIN with COALESCE for resilience.
 it('requires channel to exist in slack_channel via INNER JOIN', async () => {
query.mockResolvedValueOnce([{ total: 0 }]).mockResolvedValueOnce([]);
await service.searchMessages({ teamId: 'T1' });

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

Comment threadpackages/backend/src/search/search.persistence.service.ts
Comment threadpackages/backend/src/search/search.controller.ts
Comment threadpackages/backend/src/search/search.persistence.service.ts
@sfreeman422
sfreeman422 merged commit 3264aa6 into masterJul 30, 2026
11 checks passed
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

@sfreeman422
, '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

Removed private channels from search - #272

Merged
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels
Jul 30, 2026
Merged

Removed private channels from search#272
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels

Conversation

@sfreeman422

Copy link
Copy Markdown
Collaborator

No description provided.

CopilotAI review requested due to automatic review settings July 29, 2026 23:56

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR changes the backend search behavior for messages by shifting channel filtering responsibility from the controller to the persistence layer and tightening the SQL joins to require a slack_channel match.

Changes:

  • Removed the controller-side filter that previously dropped non-public channel IDs from /messages results.
  • Updated the search SQL to remove the message.channel LIKE 'C%' condition, switch slack_channel from LEFT JOIN to INNER JOIN, and select slack_channel.name directly as channelName.
  • Updated/added unit tests to assert the new SQL join and controller pass-through behavior.

Reviewed changes

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

FileDescription
packages/backend/src/search/search.persistence.service.tsAlters SQL construction for message search (conditions, join type, selected channelName).
packages/backend/src/search/search.persistence.service.spec.tsUpdates assertions and adds a test reflecting the new SQL join expectations.
packages/backend/src/search/search.controller.tsRemoves controller-side filtering of messages by channel ID prefix.
packages/backend/src/search/search.controller.spec.tsUpdates test expectations to match controller pass-through behavior.
Comments suppressed due to low confidence (2)

packages/backend/src/search/search.controller.spec.ts:74

  • This test now asserts that private-channel (G…) and DM (D…) messages are returned unchanged. That contradicts the PR title (“Removed private channels from search”) and removes regression coverage that previously ensured only public channels were returned. Either restore an assertion that only public-channel messages are returned, or update the PR title/requirements to reflect the new behavior.
 it('returns messages exactly as provided by persistence', async () => {
searchMessagesMock.mockResolvedValue({
messages: [
{ id: 1, message: 'public', name: 'alice', channel: 'C111' },
{ id: 2, message: 'private', name: 'bob', channel: 'G222' },

packages/backend/src/search/search.persistence.service.spec.ts:97

  • This new test enforces that the query requires a matching slack_channel row via INNER JOIN. That requirement can unintentionally hide valid messages if slack_channel is not fully populated (and it still doesn't guarantee private channels are excluded). If the intent is privacy (exclude G…/D…), add a test that asserts a public-channel filter and consider keeping slack_channel as a LEFT JOIN with COALESCE for resilience.
 it('requires channel to exist in slack_channel via INNER JOIN', async () => {
query.mockResolvedValueOnce([{ total: 0 }]).mockResolvedValueOnce([]);
await service.searchMessages({ teamId: 'T1' });

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

Comment threadpackages/backend/src/search/search.persistence.service.ts
Comment threadpackages/backend/src/search/search.controller.ts
Comment threadpackages/backend/src/search/search.persistence.service.ts
@sfreeman422
sfreeman422 merged commit 3264aa6 into masterJul 30, 2026
11 checks passed
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

@sfreeman422
, '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

Removed private channels from search - #272

Merged
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels
Jul 30, 2026
Merged

Removed private channels from search#272
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels

Conversation

@sfreeman422

Copy link
Copy Markdown
Collaborator

No description provided.

CopilotAI review requested due to automatic review settings July 29, 2026 23:56

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR changes the backend search behavior for messages by shifting channel filtering responsibility from the controller to the persistence layer and tightening the SQL joins to require a slack_channel match.

Changes:

  • Removed the controller-side filter that previously dropped non-public channel IDs from /messages results.
  • Updated the search SQL to remove the message.channel LIKE 'C%' condition, switch slack_channel from LEFT JOIN to INNER JOIN, and select slack_channel.name directly as channelName.
  • Updated/added unit tests to assert the new SQL join and controller pass-through behavior.

Reviewed changes

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

FileDescription
packages/backend/src/search/search.persistence.service.tsAlters SQL construction for message search (conditions, join type, selected channelName).
packages/backend/src/search/search.persistence.service.spec.tsUpdates assertions and adds a test reflecting the new SQL join expectations.
packages/backend/src/search/search.controller.tsRemoves controller-side filtering of messages by channel ID prefix.
packages/backend/src/search/search.controller.spec.tsUpdates test expectations to match controller pass-through behavior.
Comments suppressed due to low confidence (2)

packages/backend/src/search/search.controller.spec.ts:74

  • This test now asserts that private-channel (G…) and DM (D…) messages are returned unchanged. That contradicts the PR title (“Removed private channels from search”) and removes regression coverage that previously ensured only public channels were returned. Either restore an assertion that only public-channel messages are returned, or update the PR title/requirements to reflect the new behavior.
 it('returns messages exactly as provided by persistence', async () => {
searchMessagesMock.mockResolvedValue({
messages: [
{ id: 1, message: 'public', name: 'alice', channel: 'C111' },
{ id: 2, message: 'private', name: 'bob', channel: 'G222' },

packages/backend/src/search/search.persistence.service.spec.ts:97

  • This new test enforces that the query requires a matching slack_channel row via INNER JOIN. That requirement can unintentionally hide valid messages if slack_channel is not fully populated (and it still doesn't guarantee private channels are excluded). If the intent is privacy (exclude G…/D…), add a test that asserts a public-channel filter and consider keeping slack_channel as a LEFT JOIN with COALESCE for resilience.
 it('requires channel to exist in slack_channel via INNER JOIN', async () => {
query.mockResolvedValueOnce([{ total: 0 }]).mockResolvedValueOnce([]);
await service.searchMessages({ teamId: 'T1' });

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

Comment threadpackages/backend/src/search/search.persistence.service.ts
Comment threadpackages/backend/src/search/search.controller.ts
Comment threadpackages/backend/src/search/search.persistence.service.ts
@sfreeman422
sfreeman422 merged commit 3264aa6 into masterJul 30, 2026
11 checks passed
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

@sfreeman422
, '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

Removed private channels from search - #272

Merged
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels
Jul 30, 2026
Merged

Removed private channels from search#272
sfreeman422 merged 1 commit into
masterfrom
feature/remove-private-channels

Conversation

@sfreeman422

Copy link
Copy Markdown
Collaborator

No description provided.

CopilotAI review requested due to automatic review settings July 29, 2026 23:56

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR changes the backend search behavior for messages by shifting channel filtering responsibility from the controller to the persistence layer and tightening the SQL joins to require a slack_channel match.

Changes:

  • Removed the controller-side filter that previously dropped non-public channel IDs from /messages results.
  • Updated the search SQL to remove the message.channel LIKE 'C%' condition, switch slack_channel from LEFT JOIN to INNER JOIN, and select slack_channel.name directly as channelName.
  • Updated/added unit tests to assert the new SQL join and controller pass-through behavior.

Reviewed changes

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

FileDescription
packages/backend/src/search/search.persistence.service.tsAlters SQL construction for message search (conditions, join type, selected channelName).
packages/backend/src/search/search.persistence.service.spec.tsUpdates assertions and adds a test reflecting the new SQL join expectations.
packages/backend/src/search/search.controller.tsRemoves controller-side filtering of messages by channel ID prefix.
packages/backend/src/search/search.controller.spec.tsUpdates test expectations to match controller pass-through behavior.
Comments suppressed due to low confidence (2)

packages/backend/src/search/search.controller.spec.ts:74

  • This test now asserts that private-channel (G…) and DM (D…) messages are returned unchanged. That contradicts the PR title (“Removed private channels from search”) and removes regression coverage that previously ensured only public channels were returned. Either restore an assertion that only public-channel messages are returned, or update the PR title/requirements to reflect the new behavior.
 it('returns messages exactly as provided by persistence', async () => {
searchMessagesMock.mockResolvedValue({
messages: [
{ id: 1, message: 'public', name: 'alice', channel: 'C111' },
{ id: 2, message: 'private', name: 'bob', channel: 'G222' },

packages/backend/src/search/search.persistence.service.spec.ts:97

  • This new test enforces that the query requires a matching slack_channel row via INNER JOIN. That requirement can unintentionally hide valid messages if slack_channel is not fully populated (and it still doesn't guarantee private channels are excluded). If the intent is privacy (exclude G…/D…), add a test that asserts a public-channel filter and consider keeping slack_channel as a LEFT JOIN with COALESCE for resilience.
 it('requires channel to exist in slack_channel via INNER JOIN', async () => {
query.mockResolvedValueOnce([{ total: 0 }]).mockResolvedValueOnce([]);
await service.searchMessages({ teamId: 'T1' });

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

Comment threadpackages/backend/src/search/search.persistence.service.ts
Comment threadpackages/backend/src/search/search.controller.ts
Comment threadpackages/backend/src/search/search.persistence.service.ts
@sfreeman422
sfreeman422 merged commit 3264aa6 into masterJul 30, 2026
11 checks passed
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

@sfreeman422