Repository Analysis

outline/outline

The fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and markdown compatible.

0.7 Likely human-written View on GitHub
0.7
Adjusted Score
0.7
Raw Score
100%
Time Factor
2026-05-30
Last Push
38,682
Stars
TypeScript
Language
330,578
Lines of Code
2063
Files
130
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 9HIGH 1MEDIUM 0LOW 120

Pattern Findings

130 matches across 6 categories. Click a row to expand file-level details.

Hallucination Indicators9 hits · 90 pts
SeverityFileLineSnippet
CRITICALapp/models/Collection.ts137 return !!this.store.rootStore.stars.orderedData.find(
CRITICALapp/models/Document.ts305 return !!this.store.rootStore.stars.orderedData.find(
CRITICALapp/models/Document.ts492 const pin = this.store.rootStore.pins.orderedData.find(
CRITICALapp/models/Document.ts608 return !!this.store.rootStore.pins.orderedData.find(
CRITICALapp/models/Document.ts616 return !!this.store.rootStore.pins.orderedData.find(
CRITICALapp/models/User.ts278 return this.store.rootStore.userMemberships.orderedData.find(
CRITICALapp/editor/extensions/Keys.ts169 view.state.schema.nodes.paragraph.create({})
CRITICALserver/middlewares/feature.ts14 if (!ctx.state.auth.user.team.getPreference(preference)) {
CRITICALshared/editor/plugins/UploadPlugin.ts256 view.state.schema.nodes.image.create({
Hyper-Verbose Identifiers69 hits · 70 pts
SeverityFileLineSnippet
LOWapp/scenes/Document/components/Notices.tsx30 function permanentlyDeletedDescription() {
LOWapp/scenes/Document/hooks/useDocumentSave.ts53export function shouldAutoDeleteDraftOnUnmount({
LOWapp/scenes/Login/urls.ts3function validateAndEncodeSubdomain(subdomain: string): string {
LOWapp/scenes/Login/urls.ts3function validateAndEncodeSubdomain(subdomain: string): string {
LOWapp/utils/autotrack.js261function getOrCreateMethodChain(context, methodName) {
LOWapp/utils/autotrack.js496function linkClickWillUnloadCurrentPage(event, link) {
LOWapp/utils/emoji.ts17export function generateEmojiNameFromFilename(filename: string): string {
LOWapp/components/InputMemberPermissionSelect.tsx15export default function InputMemberPermissionSelect(
LOW…ponents/Sidebar/components/SidebarDisclosureContext.ts80export function useSidebarDisclosureState() {
LOWapp/components/Sidebar/hooks/useDragAndDrop.tsx205export function useDropToChangeCollection(
LOWapp/components/Sidebar/hooks/useDragAndDrop.tsx290export function useDropToReparentDocument(
LOWapp/components/Sidebar/hooks/useDragAndDrop.tsx516export function useDropToReorderUserMembership(getIndex?: () => string) {
LOW…ents/DocumentExplorer/DocumentExplorerSearchResult.tsx23function DocumentExplorerSearchResult({
LOWapp/components/Notifications/Notifications.tsx34function useStableOrderedNotifications(
LOWapp/hooks/useTemplateSettingsActions.tsx23export function useTemplateSettingsActions(
LOWapp/hooks/useLocationSidebarContext.ts7export function useLocationSidebarContext() {
LOWapp/editor/components/CellBackgroundColorPicker.tsx11function CellBackgroundColorPicker({ activeColor, command }: Props) {
LOWplugins/slack/server/presenters/userNotLinkedBlocks.ts6export function presentUserNotLinkedBlocks(team?: Team) {
LOW…gins/webhooks/server/presenters/webhookSubscription.ts4export default function presentWebhookSubscription(
LOW…/client/components/WebhookSubscriptionDeleteDialog.tsx11export default function WebhookSubscriptionRevokeDialog({
LOW…bhooks/client/components/WebhookSubscriptionsTable.tsx47 function WebhookSubscriptionsTable(props: Props) {
LOW…ooks/client/hooks/useWebhookSubscriptionMenuActions.ts15export function useWebhookSubscriptionMenuActions(
LOWserver/errors.ts21export function InvalidAuthenticationError(
LOWserver/errors.ts178export function EmailAuthenticationRequiredError(
LOWserver/errors.ts207export function GmailAccountCreationError(
LOWserver/errors.ts216export function OIDCMalformedUserInfoError(
LOWserver/errors.ts225export function AuthenticationProviderDisabledError(
LOWserver/tools/util.ts234export async function getBreadcrumbsForDocuments(
LOWserver/test/factories.ts833export async function buildOAuthAuthorizationCode(
LOWserver/middlewares/rateLimiter.ts111 return async function registerRateLimiterMiddleware(
LOWserver/middlewares/csrf.ts20 return async function attachCSRFTokenMiddleware(ctx: AppContext, next: Next) {
LOWserver/middlewares/csrf.ts73 return async function verifyCSRFTokenMiddleware(ctx: AppContext, next: Next) {
LOWserver/middlewares/validateWebhook.ts15 return async function validateWebhookMiddleware(ctx: APIContext, next: Next) {
LOWserver/middlewares/apexAuthRedirect.ts27 return async function apexAuthRedirectMiddleware(
LOWserver/utils/jwt.ts99export async function getUserForEmailSigninToken(
LOWserver/utils/jwt.ts133export async function getDetailsForEmailUpdateToken(
LOWserver/utils/embeds.ts226export function convertBareUrlsToEmbedMarkdown(
LOWserver/utils/fs.ts27function encodeWindowsUnsafeCharacter(char: string): string {
LOWserver/utils/passport.ts346function getAuthenticatedUserSessionHash(ctx: Context): string | undefined {
LOWserver/presenters/oauthClient.ts82export function presentPublishedOAuthClient(oauthClient: OAuthClient) {
LOWserver/presenters/authenticationProvider.ts9export default function presentAuthenticationProvider(
LOWserver/presenters/oauthAuthentication.ts4export default function presentOAuthAuthentication(
LOWserver/storage/database.ts266export function applyStatementTimeoutToTransactions(
LOWserver/storage/database.ts322export function monkeyPatchSequelizeErrorsForTests(instance: Sequelize) {
LOWserver/queues/tasks/JSONAPIImportTask.ts65export function rewriteAttachmentReferences(
LOWserver/commands/documentCollaborativeUpdater.ts25export default async function documentCollaborativeUpdater({
LOWserver/routes/app.ts36function formatChildDocumentsAsMarkdown(
LOWserver/routes/oauth/middlewares/oauthErrorHandler.ts13 return async function oauthErrorHandlerMiddleware(ctx: Context, next: Next) {
LOWserver/routes/oauth/middlewares/registrationAuth.ts13 return async function registrationAuthMiddleware(ctx: Context, next: Next) {
LOWserver/routes/api/developer/developer.ts17 return async function checkDevelopmentMiddleware(ctx: Context, next: Next) {
LOWserver/routes/api/middlewares/apiErrorHandler.ts13 return async function apiErrorHandlerMiddleware(ctx: Context, next: Next) {
LOWserver/logging/tracer.ts10function isExplicitlyNonReportable(error: Error): error is ReportableError {
LOWserver/logging/tracer.ts72export function getRootSpanFromRequestContext(
LOWshared/test/editor.ts48export function createEditorStateWithSelection(
LOWshared/utils/date.ts252export function getCurrentDateTimeAsString(locale?: Intl.LocalesArgument) {
LOWshared/editor/nodes/TableHeader.ts190function createColumnDragDecorations(state: EditorState): DecorationSet {
LOWshared/editor/queries/table.ts478export function getColorSetForSelectedCells(selection: Selection): Set<string> {
LOWshared/editor/queries/table.ts501export function getDocumentTableBackgroundColors(state: EditorState): string[] {
LOWshared/editor/queries/getMarkRange.ts60export function getMarkRangeNodeSelection(
LOWshared/editor/queries/toggleBlock.ts75export function isSelectionInToggleBlockHead(state: EditorState): boolean {
9 more matches not shown…
Fake / Example Data33 hits · 36 pts
SeverityFileLineSnippet
LOWplugins/email/server/auth/email.test.ts133 email: "user@example.com",
LOWserver/utils/validators.test.ts259 expect(isMailboxAddress("user@example.com")).toBe(true);
LOWserver/utils/VerificationCode.test.ts6 const email = "user@example.com";
LOWserver/utils/VerificationCode.test.ts41 "user@example.com"
LOWserver/utils/VerificationCode.test.ts44 await VerificationCode.delete(teamId, "user@example.com");
LOWserver/models/ShareSubscription.test.ts77 ShareSubscription.normalizeEmailFingerprint("user@example.com");
LOWserver/models/ShareSubscription.test.ts84 ).toBe(ShareSubscription.normalizeEmailFingerprint("user@example.com"));
LOWserver/models/ShareSubscription.test.ts106 ).toBe(ShareSubscription.normalizeEmailFingerprint("user@example.com"));
LOWserver/models/ShareSubscription.test.ts130 ).toBe(ShareSubscription.normalizeEmailFingerprint("user@example.com"));
LOWserver/models/ShareSubscription.test.ts156 ShareSubscription.normalizeEmailFingerprint("user@example.com");
LOWserver/routes/api/users/users.test.ts26 name: "John Doe",
LOWserver/routes/api/shares/shares.test.ts1376 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1378 ShareSubscription.normalizeEmailFingerprint("user@example.com"),
LOWserver/routes/api/shares/shares.test.ts1387 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1400 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1402 ShareSubscription.normalizeEmailFingerprint("user@example.com"),
LOWserver/routes/api/shares/shares.test.ts1412 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1428 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1453 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1454 emailFingerprint: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1479 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1480 emailFingerprint: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1504 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1505 emailFingerprint: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1536 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1537 emailFingerprint: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1563 email: "user@example.com",
LOWserver/routes/api/shares/shares.test.ts1564 emailFingerprint: "user@example.com",
LOWshared/utils/csv.test.ts68 { id: "1", name: "John Doe", email: "john@example.com" },
LOWshared/utils/TextHelper.test.ts15 name: "John Doe",
LOWshared/editor/rules/mention.test.ts46 label: "John Doe",
LOWshared/editor/rules/mention.test.ts74 expect(mentions[0].label).toBe("John Doe");
LOWshared/editor/rules/mention.test.ts110 expect(mentions[0].label).toBe("John Doe");
Verbosity Indicators9 hits · 16 pts
SeverityFileLineSnippet
LOWapp/models/Comment.ts203 // Step 1: Update the reactions cache.
LOWapp/models/Comment.ts223 // Step 2: Add the user to the store.
LOW…ver/queues/tasks/UpdateDocumentsPopularityScoreTask.ts183 // Step 1: Read document IDs from readonly replica to avoid locking
LOW…ver/queues/tasks/UpdateDocumentsPopularityScoreTask.ts220 // Step 2: Insert the IDs into the working table on primary
LOW…ver/queues/tasks/UpdateDocumentsPopularityScoreTask.ts272 // Step 1: Get batch of document IDs to process
LOW…ver/queues/tasks/UpdateDocumentsPopularityScoreTask.ts292 // Step 2: Calculate scores outside of a transaction
LOW…ver/queues/tasks/UpdateDocumentsPopularityScoreTask.ts299 // Step 3: Update document scores
LOW…ver/queues/tasks/UpdateDocumentsPopularityScoreTask.ts302 // Step 4: Mark batch as processed
LOWserver/routes/api/auth/auth.ts139 // If the user did not _just_ sign in then we need to check if they continue
Over-Commented Block9 hits · 9 pts
SeverityFileLineSnippet
LOWserver/typings/outlinewiki__koa-passport.d.ts1declare module "@outlinewiki/koa-passport" {
LOWserver/utils/requestFilteringAgent/index.ts1/* oxlint-disable no-restricted-imports */
LOWserver/policies/cancan.ts281// https://github.com/microsoft/TypeScript/issues/36931
LOWserver/policies/cancan.ts301// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LOWserver/logging/tracing.ts1// MIT License
LOWshared/editor/lib/markdown/serializer.ts1/* oxlint-disable @typescript-eslint/ban-ts-comment */
LOWshared/editor/lib/markdown/serializer.ts21 // called as
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply need
LOW.github/workflows/codeql-analysis.yml61 # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippet
HIGHREADME.md32> **Note:** Please do not submit AI-generated pull requests. We receive a high volume of mass, low-quality PRs generated