@lunora/advisor 1.0.0-alpha.74 → 1.0.0-alpha.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -2405,6 +2405,32 @@ declare const constraintValidator: Lint;
2405
2405
  * as its own lint or merges with a future latency counterpart).
2406
2406
  */
2407
2407
  declare const errorRateOutlier: Lint;
2408
+ /**
2409
+ * `fan_out_breadth` — flag a shard set wide enough that a cross-shard read over
2410
+ * it would approach the per-invocation subrequest ceiling.
2411
+ *
2412
+ * `.shardBy(key)` makes reads cheap by keeping each one on a single Durable
2413
+ * Object. A query that cannot be answered from one shard fans out instead, and
2414
+ * the coordinator issues one Durable Object RPC per shard. Those are in-house
2415
+ * subrequests, so they do not consume the six external connection slots — but
2416
+ * they do count against the per-invocation subrequest ceiling, and that ceiling
2417
+ * is reached by breadth alone. Bounded concurrency does not help: it paces the
2418
+ * fan-out, it does not shrink it.
2419
+ *
2420
+ * This measures **capacity, not observed fan-out**, and the distinction is the
2421
+ * whole reason for the wording. The `shardTraffic` feeder reports one entry per
2422
+ * live shard — the studio backend supplies no group at all, and the
2423
+ * Analytics-Engine feeder groups by shard TABLE over its whole retention window
2424
+ * — so neither carries "how many shards one invocation actually touched". What
2425
+ * they do carry is how wide the shard set is, which is the ceiling on any fan-out
2426
+ * over it. An app whose every read is shard-pinned is never at risk; it is told
2427
+ * how much room a cross-shard read would have, not that it made one.
2428
+ *
2429
+ * Idle shards are excluded, matching `hot_shard`: a shard with no traffic in the
2430
+ * window is not evidence of anything, and counting it would let a long tail of
2431
+ * dormant tenants raise the alarm on its own.
2432
+ */
2433
+ declare const fanOutBreadth: Lint;
2408
2434
  declare const hotShard: Lint;
2409
2435
  /**
2410
2436
  * `index_utilization` — flag indexes the workload doesn't pay for. Two
@@ -3017,6 +3043,25 @@ declare const geoIndexFieldNotGeopoint: Lint;
3017
3043
  * present); a runtime caller with no evidence flags nothing.
3018
3044
  */
3019
3045
  declare const geoIndexUnused: Lint;
3046
+ /**
3047
+ * `global_table_near_column_limit` — flag a `.global()` table approaching D1's
3048
+ * 100-column ceiling.
3049
+ *
3050
+ * Shard-local tables are stored as a JSON document in one `__doc__` column, so
3051
+ * their field count is unbounded. A `.global()` table is not: it is provisioned
3052
+ * as a real column per declared field, and D1's SQLite refuses to create a table
3053
+ * wider than 100. The store raises a clear error at that point, but the error
3054
+ * arrives at provisioning time — on the first request after deploy — which is a
3055
+ * late and expensive place to learn a table needs splitting.
3056
+ *
3057
+ * The remediation is a design change (split the table, or collapse the tail of
3058
+ * the fields into one object field), so the warning is only useful with runway.
3059
+ * That is what {@link WARN_AT_COLUMNS} buys.
3060
+ *
3061
+ * Only `.global()` tables are checked — a `root`/`shardBy` table's fields never
3062
+ * become columns, so the ceiling does not apply to it.
3063
+ */
3064
+ declare const globalTableNearColumnLimit: Lint;
3020
3065
  /**
3021
3066
  * Flags a secret-shaped string literal checked into the lunora source.
3022
3067
  *
@@ -4487,4 +4532,4 @@ interface RunAdvisorOptions {
4487
4532
  * `static` lints at build time and defer `runtime` lints to a live shard.
4488
4533
  */
4489
4534
  declare const runAdvisor: (context: LintContext, options?: RunAdvisorOptions) => Finding[];
4490
- export { ALL_LINTS, type AdvisorAdminRoute, type AdvisorAiRawRun, type AdvisorAiToolSideEffect, type AdvisorArgumentDerivedFetch, type AdvisorArgumentValidator, type AdvisorAuthApiCall, type AdvisorAuthConfig, type AdvisorBrowserUrlAccess, type AdvisorConfigCall, type AdvisorContainer, type AdvisorContainerKeyAccess, type AdvisorContainerOverride, type AdvisorExportSink, type AdvisorFailOpenGuard, type AdvisorFlagSecurityDefault, type AdvisorFunctionMetrics, type AdvisorGeoIndexUsage, type AdvisorHttpActionGuard, type AdvisorHttpHeaderWrite, type AdvisorHyperdriveCall, type AdvisorIdentityClaimRead, type AdvisorImageDeliveryUrlAccess, type AdvisorIndex, type AdvisorIndexHit, type AdvisorInsertWrite, type AdvisorKvKeyAccess, type AdvisorMailRecipientAccess, type AdvisorMap, type AdvisorMaskProcedure, type AdvisorMaskStrategy, type AdvisorMutatorWrite, type AdvisorNondeterministicCall, type AdvisorNormalizeIdAuthorization, type AdvisorNotifyCall, type AdvisorNotifyConfig, type AdvisorOwnerFieldWrite, type AdvisorPaymentWebhook, type AdvisorPrivilegedDispatch, type AdvisorProcedureProtection, type AdvisorQueryRead, type AdvisorQueue, type AdvisorQueueTuning, type AdvisorR2sqlCall, type AdvisorRatelimitKeySelector, type AdvisorRawRowReturn, type AdvisorRelation, type AdvisorRelationLoad, type AdvisorRlsProcedure, type AdvisorSchema, type AdvisorSecretLiteral, type AdvisorShape, type AdvisorShardTraffic, type AdvisorSoftDeleteRead, type AdvisorSqlInterpolation, type AdvisorStaleMigrationImport, type AdvisorStorageKeyAccess, type AdvisorStorageUpload, type AdvisorTable, type AdvisorTableSample, type AdvisorTableScan, type AdvisorVectorNamespaceAccess, type AdvisorWorkflow, type AdvisorWorkflowCall, type AdvisorWranglerVariable, type AnalyticsMetricsOptions, type AnalyticsMetricsSource, type AnalyticsRuntimeMetrics, type BaselineComparison, type Category, type CheckResult, type Coverage, type Facing, type Finding, type Grade, type Level, type Lint, type LintContext, type LintSource, MAP_VERSION, type MapSummary, type ProcedureDelta, type ProcedureScore, type ProjectScore, RUNTIME_LINTS, RunAdvisorOptions, STATIC_LINTS, type ScoreAdvisorOptions, type Sensitivity, type SensitivityLevel, actionFetchSsrf, actionWithoutErrorHandling, adminRouteWithoutGuard, aiRawRunEscapeHatch, aiRunWithoutLogging, aiToolSideEffectPromptInjection, aiUnboundedGenerationPublic, allowUnauthenticatedShardAccessEnabled, authApiCallWithoutHeaders, authCsrfCheckDisabled, authEmailVerificationDisabled, authScimWithoutTransactions, authSecureCookiesDisabled, authSessionFreshageZero, authTrustedOriginsWildcard, browserAllowPrivateTargets, browserUserUrlWithoutAllowlist, byCodepoint, circularFk, classifySensitivity, compareToBaseline, constraintValidator, containerInstanceKeyFromUserInput, containerOversizedInstance, containerPublicInternet, containerRuntimeEgressRelaxation, containerStartEnableInternetOverride, dedupeCacheKeys, duplicateIndex, emptyIndex, errorRateOutlier, errorWithoutCatalog, exportSinkMisconfigured, externalSourceIncrementalNoDeletePath, externalSourceOnGlobal, externalSourceUnscoped, filterOnPrimaryKey, filterWithoutIndex, flagGatesSecurityWithUnsafeDefault, fromServerSchema, geoIndexFieldNotGeopoint, geoIndexUnused, gradeFromScore, hardcodedSecret, hotShard, httpActionMissingAuthGuard, httpActionResponseHeaderInjection, hyperdriveOutsideAction, identityUndeclaredClaimTrusted, imagesUrlSourceFromUserInput, indexReferencesUnknownField, indexUtilization, insertManyUnsafeUserData, kvUnscopedUserKeyIdor, mailInboundDispatchWithoutVerify, mailRecipientFromRequestInput, maskUncoveredPiiColumn, maskWeakHashStrategyOnPii, maskedRelationLeakViaWith, mutatorFullRowReplace, nondeterministicQueryMutation, normalizeIdUsedAsAuthorization, notifyMissingPushConfig, notifySendOutsideAction, outputProjectionMissingOnPublicRead, ownerFieldFromArgsNotAuth, parseAdvisorMap, paymentCreateWithoutAuthorize, paymentWebhookWideTolerance, plaintextSecretInWranglerVariables, policyReferencesUnknownTable, privilegedDispatchUnvalidatedPayload, privilegedFanoutFromPublicProcedure, procedureWithoutStructuredEvent, publicArgumentUsesAny, publicMutationWithoutRatelimit, publicTableRlsOptoutConfusion, queueWithoutDlq, r2sqlOutsideAction, ratelimitDefaultMemoryStore, ratelimitKeySpoofableOrGlobal, ratelimitMiddlewareFailOpen, relationReferencesUnknownField, relationReferencesUnknownTable, rlsUncoveredTable, runAdvisor, scoreAdvisor, shapeTargetsGlobalTable, shapeUnknownTable, signupMutationWithoutDisposableGating, softDeleteIncludeDeletedFromArgs, sqlInjectionRisk, storageGenerateUploadUrlNoContentTypePin, storageKeyFromUserArgs, storagePresignedUrlForPrivateContent, storageUploadWithoutContentTypeAllowlist, storageUploadWithoutMaxSize, tableWithoutInsert, ttlFieldNotTimestamp, unboundedStringArgument, unindexedForeignKey, unindexedRelationTarget, unrestrictedWhereBranch, userCreatingMutationWithoutCaptcha, vectorsNamespaceFromUserInput, workflowDuplicateStepName, workflowUnknownTarget, workflowUnused };
4535
+ export { ALL_LINTS, type AdvisorAdminRoute, type AdvisorAiRawRun, type AdvisorAiToolSideEffect, type AdvisorArgumentDerivedFetch, type AdvisorArgumentValidator, type AdvisorAuthApiCall, type AdvisorAuthConfig, type AdvisorBrowserUrlAccess, type AdvisorConfigCall, type AdvisorContainer, type AdvisorContainerKeyAccess, type AdvisorContainerOverride, type AdvisorExportSink, type AdvisorFailOpenGuard, type AdvisorFlagSecurityDefault, type AdvisorFunctionMetrics, type AdvisorGeoIndexUsage, type AdvisorHttpActionGuard, type AdvisorHttpHeaderWrite, type AdvisorHyperdriveCall, type AdvisorIdentityClaimRead, type AdvisorImageDeliveryUrlAccess, type AdvisorIndex, type AdvisorIndexHit, type AdvisorInsertWrite, type AdvisorKvKeyAccess, type AdvisorMailRecipientAccess, type AdvisorMap, type AdvisorMaskProcedure, type AdvisorMaskStrategy, type AdvisorMutatorWrite, type AdvisorNondeterministicCall, type AdvisorNormalizeIdAuthorization, type AdvisorNotifyCall, type AdvisorNotifyConfig, type AdvisorOwnerFieldWrite, type AdvisorPaymentWebhook, type AdvisorPrivilegedDispatch, type AdvisorProcedureProtection, type AdvisorQueryRead, type AdvisorQueue, type AdvisorQueueTuning, type AdvisorR2sqlCall, type AdvisorRatelimitKeySelector, type AdvisorRawRowReturn, type AdvisorRelation, type AdvisorRelationLoad, type AdvisorRlsProcedure, type AdvisorSchema, type AdvisorSecretLiteral, type AdvisorShape, type AdvisorShardTraffic, type AdvisorSoftDeleteRead, type AdvisorSqlInterpolation, type AdvisorStaleMigrationImport, type AdvisorStorageKeyAccess, type AdvisorStorageUpload, type AdvisorTable, type AdvisorTableSample, type AdvisorTableScan, type AdvisorVectorNamespaceAccess, type AdvisorWorkflow, type AdvisorWorkflowCall, type AdvisorWranglerVariable, type AnalyticsMetricsOptions, type AnalyticsMetricsSource, type AnalyticsRuntimeMetrics, type BaselineComparison, type Category, type CheckResult, type Coverage, type Facing, type Finding, type Grade, type Level, type Lint, type LintContext, type LintSource, MAP_VERSION, type MapSummary, type ProcedureDelta, type ProcedureScore, type ProjectScore, RUNTIME_LINTS, RunAdvisorOptions, STATIC_LINTS, type ScoreAdvisorOptions, type Sensitivity, type SensitivityLevel, actionFetchSsrf, actionWithoutErrorHandling, adminRouteWithoutGuard, aiRawRunEscapeHatch, aiRunWithoutLogging, aiToolSideEffectPromptInjection, aiUnboundedGenerationPublic, allowUnauthenticatedShardAccessEnabled, authApiCallWithoutHeaders, authCsrfCheckDisabled, authEmailVerificationDisabled, authScimWithoutTransactions, authSecureCookiesDisabled, authSessionFreshageZero, authTrustedOriginsWildcard, browserAllowPrivateTargets, browserUserUrlWithoutAllowlist, byCodepoint, circularFk, classifySensitivity, compareToBaseline, constraintValidator, containerInstanceKeyFromUserInput, containerOversizedInstance, containerPublicInternet, containerRuntimeEgressRelaxation, containerStartEnableInternetOverride, dedupeCacheKeys, duplicateIndex, emptyIndex, errorRateOutlier, errorWithoutCatalog, exportSinkMisconfigured, externalSourceIncrementalNoDeletePath, externalSourceOnGlobal, externalSourceUnscoped, fanOutBreadth, filterOnPrimaryKey, filterWithoutIndex, flagGatesSecurityWithUnsafeDefault, fromServerSchema, geoIndexFieldNotGeopoint, geoIndexUnused, globalTableNearColumnLimit, gradeFromScore, hardcodedSecret, hotShard, httpActionMissingAuthGuard, httpActionResponseHeaderInjection, hyperdriveOutsideAction, identityUndeclaredClaimTrusted, imagesUrlSourceFromUserInput, indexReferencesUnknownField, indexUtilization, insertManyUnsafeUserData, kvUnscopedUserKeyIdor, mailInboundDispatchWithoutVerify, mailRecipientFromRequestInput, maskUncoveredPiiColumn, maskWeakHashStrategyOnPii, maskedRelationLeakViaWith, mutatorFullRowReplace, nondeterministicQueryMutation, normalizeIdUsedAsAuthorization, notifyMissingPushConfig, notifySendOutsideAction, outputProjectionMissingOnPublicRead, ownerFieldFromArgsNotAuth, parseAdvisorMap, paymentCreateWithoutAuthorize, paymentWebhookWideTolerance, plaintextSecretInWranglerVariables, policyReferencesUnknownTable, privilegedDispatchUnvalidatedPayload, privilegedFanoutFromPublicProcedure, procedureWithoutStructuredEvent, publicArgumentUsesAny, publicMutationWithoutRatelimit, publicTableRlsOptoutConfusion, queueWithoutDlq, r2sqlOutsideAction, ratelimitDefaultMemoryStore, ratelimitKeySpoofableOrGlobal, ratelimitMiddlewareFailOpen, relationReferencesUnknownField, relationReferencesUnknownTable, rlsUncoveredTable, runAdvisor, scoreAdvisor, shapeTargetsGlobalTable, shapeUnknownTable, signupMutationWithoutDisposableGating, softDeleteIncludeDeletedFromArgs, sqlInjectionRisk, storageGenerateUploadUrlNoContentTypePin, storageKeyFromUserArgs, storagePresignedUrlForPrivateContent, storageUploadWithoutContentTypeAllowlist, storageUploadWithoutMaxSize, tableWithoutInsert, ttlFieldNotTimestamp, unboundedStringArgument, unindexedForeignKey, unindexedRelationTarget, unrestrictedWhereBranch, userCreatingMutationWithoutCaptcha, vectorsNamespaceFromUserInput, workflowDuplicateStepName, workflowUnknownTarget, workflowUnused };
package/dist/index.d.ts CHANGED
@@ -2405,6 +2405,32 @@ declare const constraintValidator: Lint;
2405
2405
  * as its own lint or merges with a future latency counterpart).
2406
2406
  */
2407
2407
  declare const errorRateOutlier: Lint;
2408
+ /**
2409
+ * `fan_out_breadth` — flag a shard set wide enough that a cross-shard read over
2410
+ * it would approach the per-invocation subrequest ceiling.
2411
+ *
2412
+ * `.shardBy(key)` makes reads cheap by keeping each one on a single Durable
2413
+ * Object. A query that cannot be answered from one shard fans out instead, and
2414
+ * the coordinator issues one Durable Object RPC per shard. Those are in-house
2415
+ * subrequests, so they do not consume the six external connection slots — but
2416
+ * they do count against the per-invocation subrequest ceiling, and that ceiling
2417
+ * is reached by breadth alone. Bounded concurrency does not help: it paces the
2418
+ * fan-out, it does not shrink it.
2419
+ *
2420
+ * This measures **capacity, not observed fan-out**, and the distinction is the
2421
+ * whole reason for the wording. The `shardTraffic` feeder reports one entry per
2422
+ * live shard — the studio backend supplies no group at all, and the
2423
+ * Analytics-Engine feeder groups by shard TABLE over its whole retention window
2424
+ * — so neither carries "how many shards one invocation actually touched". What
2425
+ * they do carry is how wide the shard set is, which is the ceiling on any fan-out
2426
+ * over it. An app whose every read is shard-pinned is never at risk; it is told
2427
+ * how much room a cross-shard read would have, not that it made one.
2428
+ *
2429
+ * Idle shards are excluded, matching `hot_shard`: a shard with no traffic in the
2430
+ * window is not evidence of anything, and counting it would let a long tail of
2431
+ * dormant tenants raise the alarm on its own.
2432
+ */
2433
+ declare const fanOutBreadth: Lint;
2408
2434
  declare const hotShard: Lint;
2409
2435
  /**
2410
2436
  * `index_utilization` — flag indexes the workload doesn't pay for. Two
@@ -3017,6 +3043,25 @@ declare const geoIndexFieldNotGeopoint: Lint;
3017
3043
  * present); a runtime caller with no evidence flags nothing.
3018
3044
  */
3019
3045
  declare const geoIndexUnused: Lint;
3046
+ /**
3047
+ * `global_table_near_column_limit` — flag a `.global()` table approaching D1's
3048
+ * 100-column ceiling.
3049
+ *
3050
+ * Shard-local tables are stored as a JSON document in one `__doc__` column, so
3051
+ * their field count is unbounded. A `.global()` table is not: it is provisioned
3052
+ * as a real column per declared field, and D1's SQLite refuses to create a table
3053
+ * wider than 100. The store raises a clear error at that point, but the error
3054
+ * arrives at provisioning time — on the first request after deploy — which is a
3055
+ * late and expensive place to learn a table needs splitting.
3056
+ *
3057
+ * The remediation is a design change (split the table, or collapse the tail of
3058
+ * the fields into one object field), so the warning is only useful with runway.
3059
+ * That is what {@link WARN_AT_COLUMNS} buys.
3060
+ *
3061
+ * Only `.global()` tables are checked — a `root`/`shardBy` table's fields never
3062
+ * become columns, so the ceiling does not apply to it.
3063
+ */
3064
+ declare const globalTableNearColumnLimit: Lint;
3020
3065
  /**
3021
3066
  * Flags a secret-shaped string literal checked into the lunora source.
3022
3067
  *
@@ -4487,4 +4532,4 @@ interface RunAdvisorOptions {
4487
4532
  * `static` lints at build time and defer `runtime` lints to a live shard.
4488
4533
  */
4489
4534
  declare const runAdvisor: (context: LintContext, options?: RunAdvisorOptions) => Finding[];
4490
- export { ALL_LINTS, type AdvisorAdminRoute, type AdvisorAiRawRun, type AdvisorAiToolSideEffect, type AdvisorArgumentDerivedFetch, type AdvisorArgumentValidator, type AdvisorAuthApiCall, type AdvisorAuthConfig, type AdvisorBrowserUrlAccess, type AdvisorConfigCall, type AdvisorContainer, type AdvisorContainerKeyAccess, type AdvisorContainerOverride, type AdvisorExportSink, type AdvisorFailOpenGuard, type AdvisorFlagSecurityDefault, type AdvisorFunctionMetrics, type AdvisorGeoIndexUsage, type AdvisorHttpActionGuard, type AdvisorHttpHeaderWrite, type AdvisorHyperdriveCall, type AdvisorIdentityClaimRead, type AdvisorImageDeliveryUrlAccess, type AdvisorIndex, type AdvisorIndexHit, type AdvisorInsertWrite, type AdvisorKvKeyAccess, type AdvisorMailRecipientAccess, type AdvisorMap, type AdvisorMaskProcedure, type AdvisorMaskStrategy, type AdvisorMutatorWrite, type AdvisorNondeterministicCall, type AdvisorNormalizeIdAuthorization, type AdvisorNotifyCall, type AdvisorNotifyConfig, type AdvisorOwnerFieldWrite, type AdvisorPaymentWebhook, type AdvisorPrivilegedDispatch, type AdvisorProcedureProtection, type AdvisorQueryRead, type AdvisorQueue, type AdvisorQueueTuning, type AdvisorR2sqlCall, type AdvisorRatelimitKeySelector, type AdvisorRawRowReturn, type AdvisorRelation, type AdvisorRelationLoad, type AdvisorRlsProcedure, type AdvisorSchema, type AdvisorSecretLiteral, type AdvisorShape, type AdvisorShardTraffic, type AdvisorSoftDeleteRead, type AdvisorSqlInterpolation, type AdvisorStaleMigrationImport, type AdvisorStorageKeyAccess, type AdvisorStorageUpload, type AdvisorTable, type AdvisorTableSample, type AdvisorTableScan, type AdvisorVectorNamespaceAccess, type AdvisorWorkflow, type AdvisorWorkflowCall, type AdvisorWranglerVariable, type AnalyticsMetricsOptions, type AnalyticsMetricsSource, type AnalyticsRuntimeMetrics, type BaselineComparison, type Category, type CheckResult, type Coverage, type Facing, type Finding, type Grade, type Level, type Lint, type LintContext, type LintSource, MAP_VERSION, type MapSummary, type ProcedureDelta, type ProcedureScore, type ProjectScore, RUNTIME_LINTS, RunAdvisorOptions, STATIC_LINTS, type ScoreAdvisorOptions, type Sensitivity, type SensitivityLevel, actionFetchSsrf, actionWithoutErrorHandling, adminRouteWithoutGuard, aiRawRunEscapeHatch, aiRunWithoutLogging, aiToolSideEffectPromptInjection, aiUnboundedGenerationPublic, allowUnauthenticatedShardAccessEnabled, authApiCallWithoutHeaders, authCsrfCheckDisabled, authEmailVerificationDisabled, authScimWithoutTransactions, authSecureCookiesDisabled, authSessionFreshageZero, authTrustedOriginsWildcard, browserAllowPrivateTargets, browserUserUrlWithoutAllowlist, byCodepoint, circularFk, classifySensitivity, compareToBaseline, constraintValidator, containerInstanceKeyFromUserInput, containerOversizedInstance, containerPublicInternet, containerRuntimeEgressRelaxation, containerStartEnableInternetOverride, dedupeCacheKeys, duplicateIndex, emptyIndex, errorRateOutlier, errorWithoutCatalog, exportSinkMisconfigured, externalSourceIncrementalNoDeletePath, externalSourceOnGlobal, externalSourceUnscoped, filterOnPrimaryKey, filterWithoutIndex, flagGatesSecurityWithUnsafeDefault, fromServerSchema, geoIndexFieldNotGeopoint, geoIndexUnused, gradeFromScore, hardcodedSecret, hotShard, httpActionMissingAuthGuard, httpActionResponseHeaderInjection, hyperdriveOutsideAction, identityUndeclaredClaimTrusted, imagesUrlSourceFromUserInput, indexReferencesUnknownField, indexUtilization, insertManyUnsafeUserData, kvUnscopedUserKeyIdor, mailInboundDispatchWithoutVerify, mailRecipientFromRequestInput, maskUncoveredPiiColumn, maskWeakHashStrategyOnPii, maskedRelationLeakViaWith, mutatorFullRowReplace, nondeterministicQueryMutation, normalizeIdUsedAsAuthorization, notifyMissingPushConfig, notifySendOutsideAction, outputProjectionMissingOnPublicRead, ownerFieldFromArgsNotAuth, parseAdvisorMap, paymentCreateWithoutAuthorize, paymentWebhookWideTolerance, plaintextSecretInWranglerVariables, policyReferencesUnknownTable, privilegedDispatchUnvalidatedPayload, privilegedFanoutFromPublicProcedure, procedureWithoutStructuredEvent, publicArgumentUsesAny, publicMutationWithoutRatelimit, publicTableRlsOptoutConfusion, queueWithoutDlq, r2sqlOutsideAction, ratelimitDefaultMemoryStore, ratelimitKeySpoofableOrGlobal, ratelimitMiddlewareFailOpen, relationReferencesUnknownField, relationReferencesUnknownTable, rlsUncoveredTable, runAdvisor, scoreAdvisor, shapeTargetsGlobalTable, shapeUnknownTable, signupMutationWithoutDisposableGating, softDeleteIncludeDeletedFromArgs, sqlInjectionRisk, storageGenerateUploadUrlNoContentTypePin, storageKeyFromUserArgs, storagePresignedUrlForPrivateContent, storageUploadWithoutContentTypeAllowlist, storageUploadWithoutMaxSize, tableWithoutInsert, ttlFieldNotTimestamp, unboundedStringArgument, unindexedForeignKey, unindexedRelationTarget, unrestrictedWhereBranch, userCreatingMutationWithoutCaptcha, vectorsNamespaceFromUserInput, workflowDuplicateStepName, workflowUnknownTarget, workflowUnused };
4535
+ export { ALL_LINTS, type AdvisorAdminRoute, type AdvisorAiRawRun, type AdvisorAiToolSideEffect, type AdvisorArgumentDerivedFetch, type AdvisorArgumentValidator, type AdvisorAuthApiCall, type AdvisorAuthConfig, type AdvisorBrowserUrlAccess, type AdvisorConfigCall, type AdvisorContainer, type AdvisorContainerKeyAccess, type AdvisorContainerOverride, type AdvisorExportSink, type AdvisorFailOpenGuard, type AdvisorFlagSecurityDefault, type AdvisorFunctionMetrics, type AdvisorGeoIndexUsage, type AdvisorHttpActionGuard, type AdvisorHttpHeaderWrite, type AdvisorHyperdriveCall, type AdvisorIdentityClaimRead, type AdvisorImageDeliveryUrlAccess, type AdvisorIndex, type AdvisorIndexHit, type AdvisorInsertWrite, type AdvisorKvKeyAccess, type AdvisorMailRecipientAccess, type AdvisorMap, type AdvisorMaskProcedure, type AdvisorMaskStrategy, type AdvisorMutatorWrite, type AdvisorNondeterministicCall, type AdvisorNormalizeIdAuthorization, type AdvisorNotifyCall, type AdvisorNotifyConfig, type AdvisorOwnerFieldWrite, type AdvisorPaymentWebhook, type AdvisorPrivilegedDispatch, type AdvisorProcedureProtection, type AdvisorQueryRead, type AdvisorQueue, type AdvisorQueueTuning, type AdvisorR2sqlCall, type AdvisorRatelimitKeySelector, type AdvisorRawRowReturn, type AdvisorRelation, type AdvisorRelationLoad, type AdvisorRlsProcedure, type AdvisorSchema, type AdvisorSecretLiteral, type AdvisorShape, type AdvisorShardTraffic, type AdvisorSoftDeleteRead, type AdvisorSqlInterpolation, type AdvisorStaleMigrationImport, type AdvisorStorageKeyAccess, type AdvisorStorageUpload, type AdvisorTable, type AdvisorTableSample, type AdvisorTableScan, type AdvisorVectorNamespaceAccess, type AdvisorWorkflow, type AdvisorWorkflowCall, type AdvisorWranglerVariable, type AnalyticsMetricsOptions, type AnalyticsMetricsSource, type AnalyticsRuntimeMetrics, type BaselineComparison, type Category, type CheckResult, type Coverage, type Facing, type Finding, type Grade, type Level, type Lint, type LintContext, type LintSource, MAP_VERSION, type MapSummary, type ProcedureDelta, type ProcedureScore, type ProjectScore, RUNTIME_LINTS, RunAdvisorOptions, STATIC_LINTS, type ScoreAdvisorOptions, type Sensitivity, type SensitivityLevel, actionFetchSsrf, actionWithoutErrorHandling, adminRouteWithoutGuard, aiRawRunEscapeHatch, aiRunWithoutLogging, aiToolSideEffectPromptInjection, aiUnboundedGenerationPublic, allowUnauthenticatedShardAccessEnabled, authApiCallWithoutHeaders, authCsrfCheckDisabled, authEmailVerificationDisabled, authScimWithoutTransactions, authSecureCookiesDisabled, authSessionFreshageZero, authTrustedOriginsWildcard, browserAllowPrivateTargets, browserUserUrlWithoutAllowlist, byCodepoint, circularFk, classifySensitivity, compareToBaseline, constraintValidator, containerInstanceKeyFromUserInput, containerOversizedInstance, containerPublicInternet, containerRuntimeEgressRelaxation, containerStartEnableInternetOverride, dedupeCacheKeys, duplicateIndex, emptyIndex, errorRateOutlier, errorWithoutCatalog, exportSinkMisconfigured, externalSourceIncrementalNoDeletePath, externalSourceOnGlobal, externalSourceUnscoped, fanOutBreadth, filterOnPrimaryKey, filterWithoutIndex, flagGatesSecurityWithUnsafeDefault, fromServerSchema, geoIndexFieldNotGeopoint, geoIndexUnused, globalTableNearColumnLimit, gradeFromScore, hardcodedSecret, hotShard, httpActionMissingAuthGuard, httpActionResponseHeaderInjection, hyperdriveOutsideAction, identityUndeclaredClaimTrusted, imagesUrlSourceFromUserInput, indexReferencesUnknownField, indexUtilization, insertManyUnsafeUserData, kvUnscopedUserKeyIdor, mailInboundDispatchWithoutVerify, mailRecipientFromRequestInput, maskUncoveredPiiColumn, maskWeakHashStrategyOnPii, maskedRelationLeakViaWith, mutatorFullRowReplace, nondeterministicQueryMutation, normalizeIdUsedAsAuthorization, notifyMissingPushConfig, notifySendOutsideAction, outputProjectionMissingOnPublicRead, ownerFieldFromArgsNotAuth, parseAdvisorMap, paymentCreateWithoutAuthorize, paymentWebhookWideTolerance, plaintextSecretInWranglerVariables, policyReferencesUnknownTable, privilegedDispatchUnvalidatedPayload, privilegedFanoutFromPublicProcedure, procedureWithoutStructuredEvent, publicArgumentUsesAny, publicMutationWithoutRatelimit, publicTableRlsOptoutConfusion, queueWithoutDlq, r2sqlOutsideAction, ratelimitDefaultMemoryStore, ratelimitKeySpoofableOrGlobal, ratelimitMiddlewareFailOpen, relationReferencesUnknownField, relationReferencesUnknownTable, rlsUncoveredTable, runAdvisor, scoreAdvisor, shapeTargetsGlobalTable, shapeUnknownTable, signupMutationWithoutDisposableGating, softDeleteIncludeDeletedFromArgs, sqlInjectionRisk, storageGenerateUploadUrlNoContentTypePin, storageKeyFromUserArgs, storagePresignedUrlForPrivateContent, storageUploadWithoutContentTypeAllowlist, storageUploadWithoutMaxSize, tableWithoutInsert, ttlFieldNotTimestamp, unboundedStringArgument, unindexedForeignKey, unindexedRelationTarget, unrestrictedWhereBranch, userCreatingMutationWithoutCaptcha, vectorsNamespaceFromUserInput, workflowDuplicateStepName, workflowUnknownTarget, workflowUnused };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{dedupeCacheKeys as m}from"./packem_shared/dedupeCacheKeys-7JgxaQWV.mjs";import s from"./packem_shared/constraintValidator-N339mfyx.mjs";import n from"./packem_shared/errorRateOutlier-CgK42sq0.mjs";import p from"./packem_shared/hotShard-io-eF2Sx.mjs";import f from"./packem_shared/indexUtilization-QfbIH_w4.mjs";import l from"./packem_shared/actionFetchSsrf-BbWxy1Yf.mjs";import u from"./packem_shared/actionWithoutErrorHandling-rhzjCEqm.mjs";import d from"./packem_shared/adminRouteWithoutGuard-BbscPp1m.mjs";import c from"./packem_shared/aiRawRunEscapeHatch-DfhjYm43.mjs";import $ from"./packem_shared/aiRunWithoutLogging-B0K93Pga.mjs";import h from"./packem_shared/aiToolSideEffectPromptInjection-DnWQOoKi.mjs";import g from"./packem_shared/aiUnboundedGenerationPublic-iu7crnSa.mjs";import S from"./packem_shared/allowUnauthenticatedShardAccessEnabled-D4aMNBb0.mjs";import b from"./packem_shared/authApiCallWithoutHeaders-BHkik-EF.mjs";import y from"./packem_shared/authCsrfCheckDisabled-De9ammtV.mjs";import U from"./packem_shared/authEmailVerificationDisabled-BFKdJcx4.mjs";import I from"./packem_shared/authScimWithoutTransactions-DCtLXzks.mjs";import A from"./packem_shared/authSecureCookiesDisabled-B4WIzvMm.mjs";import R from"./packem_shared/authSessionFreshageZero-Bpcaf_Pe.mjs";import T from"./packem_shared/authTrustedOriginsWildcard-DjU9NXEm.mjs";import W from"./packem_shared/browserAllowPrivateTargets-Dxyeh6lg.mjs";import v from"./packem_shared/browserUserUrlWithoutAllowlist-BHBS6b0N.mjs";import k from"./packem_shared/circularFk-ZNjkhLaE.mjs";import w from"./packem_shared/containerInstanceKeyFromUserInput-C8S4T3ty.mjs";import x from"./packem_shared/containerOversizedInstance-B9wW_sU5.mjs";import F from"./packem_shared/containerPublicInternet-g0TRsayn.mjs";import C from"./packem_shared/containerRuntimeEgressRelaxation-BQ2ZD1aV.mjs";import M from"./packem_shared/containerStartEnableInternetOverride-B62WUura.mjs";import P from"./packem_shared/duplicateIndex-DFT7qLQD.mjs";import D from"./packem_shared/emptyIndex-Bp-Y81D0.mjs";import N from"./packem_shared/errorWithoutCatalog-0PbxiZL4.mjs";import O from"./packem_shared/exportSinkMisconfigured-DvpAaa6j.mjs";import E from"./packem_shared/externalSourceIncrementalNoDeletePath-DnoL64YY.mjs";import G from"./packem_shared/externalSourceOnGlobal-IYnALPlO.mjs";import K from"./packem_shared/externalSourceUnscoped-DqBp5jYr.mjs";import L from"./packem_shared/filterOnPrimaryKey-Db947tQY.mjs";import _ from"./packem_shared/filterWithoutIndex-pIpqk-O8.mjs";import j from"./packem_shared/flagGatesSecurityWithUnsafeDefault-DPGFEHTt.mjs";import q from"./packem_shared/geoIndexFieldNotGeopoint-DAGLZtaH.mjs";import z from"./packem_shared/geoIndexUnused-B5Oww9o2.mjs";import H from"./packem_shared/hardcodedSecret-yu14ITlW.mjs";import V from"./packem_shared/httpActionMissingAuthGuard-BZDdeW_D.mjs";import B from"./packem_shared/httpActionResponseHeaderInjection-D063rB7U.mjs";import Q from"./packem_shared/hyperdriveOutsideAction-B8ffQwgl.mjs";import Z from"./packem_shared/identityUndeclaredClaimTrusted-BYRYGQ74.mjs";import J from"./packem_shared/imagesUrlSourceFromUserInput-Cy5pc_dA.mjs";import X from"./packem_shared/indexReferencesUnknownField-BPJjE0zg.mjs";import Y from"./packem_shared/insertManyUnsafeUserData-xLYAkcKj.mjs";import oo from"./packem_shared/kvUnscopedUserKeyIdor-B4lGxRxh.mjs";import ro from"./packem_shared/mailInboundDispatchWithoutVerify-BivYJ5F9.mjs";import to from"./packem_shared/mailRecipientFromRequestInput-BR_oSh65.mjs";import eo from"./packem_shared/maskUncoveredPiiColumn-DqPfZM2O.mjs";import io from"./packem_shared/maskWeakHashStrategyOnPii-DcEwc4Sz.mjs";import ao from"./packem_shared/maskedRelationLeakViaWith-CxYk0MDW.mjs";import{i as mo}from"./packem_shared/finding-BAVgqnCF.mjs";import so from"./packem_shared/mutatorFullRowReplace-CEgecSGm.mjs";import no from"./packem_shared/nondeterministicQueryMutation-BZV_biUV.mjs";import po from"./packem_shared/normalizeIdUsedAsAuthorization-FjISSXJm.mjs";import fo from"./packem_shared/notifyMissingPushConfig-C_GbVw3S.mjs";import lo from"./packem_shared/notifySendOutsideAction-B9DcirhJ.mjs";import uo from"./packem_shared/outputProjectionMissingOnPublicRead-9Pm9766s.mjs";import co from"./packem_shared/ownerFieldFromArgsNotAuth-D4K-_0aD.mjs";import $o from"./packem_shared/paymentCreateWithoutAuthorize-CurtqN8K.mjs";import ho from"./packem_shared/paymentWebhookWideTolerance-I7ingfR8.mjs";import go from"./packem_shared/plaintextSecretInWranglerVariables-CmbygN6_.mjs";import So from"./packem_shared/policyReferencesUnknownTable-D3WelAQa.mjs";import bo from"./packem_shared/privilegedDispatchUnvalidatedPayload-74GuGye1.mjs";import yo from"./packem_shared/privilegedFanoutFromPublicProcedure-sMsZN4uP.mjs";import Uo from"./packem_shared/procedureWithoutStructuredEvent-l40nx9tX.mjs";import Io from"./packem_shared/publicArgumentUsesAny-BzdcoJ9C.mjs";import Ao from"./packem_shared/publicMutationWithoutRatelimit-CozomYXw.mjs";import Ro from"./packem_shared/publicTableRlsOptoutConfusion-CaWtPGAn.mjs";import To from"./packem_shared/queueWithoutDlq-BLY3iy9Q.mjs";import Wo from"./packem_shared/r2sqlOutsideAction-DCMAsAeM.mjs";import vo from"./packem_shared/ratelimitDefaultMemoryStore-mOdI3Jmb.mjs";import ko from"./packem_shared/ratelimitKeySpoofableOrGlobal-DaGId_Fh.mjs";import wo from"./packem_shared/ratelimitMiddlewareFailOpen-CTWVosEc.mjs";import xo from"./packem_shared/relationReferencesUnknownField-clqyB69Y.mjs";import Fo from"./packem_shared/relationReferencesUnknownTable-EOtKyaHx.mjs";import Co from"./packem_shared/rlsUncoveredTable-DYHgnoos.mjs";import Mo from"./packem_shared/shapeTargetsGlobalTable-SAlq2N-T.mjs";import Po from"./packem_shared/shapeUnknownTable-DhvsbEtT.mjs";import Do from"./packem_shared/signupMutationWithoutDisposableGating-Tgv9SbsY.mjs";import No from"./packem_shared/softDeleteIncludeDeletedFromArgs-DgxpQHRA.mjs";import Oo from"./packem_shared/sqlInjectionRisk-D2NaT-5c.mjs";import Eo from"./packem_shared/storageGenerateUploadUrlNoContentTypePin-C9cjl6Jh.mjs";import Go from"./packem_shared/storageKeyFromUserArgs-CI-6kyte.mjs";import Ko from"./packem_shared/storagePresignedUrlForPrivateContent-j7VhwIdu.mjs";import Lo from"./packem_shared/storageUploadWithoutContentTypeAllowlist-oxKLecuf.mjs";import _o from"./packem_shared/storageUploadWithoutMaxSize-DUDxPutk.mjs";import jo from"./packem_shared/tableWithoutInsert-BV7qsPKx.mjs";import qo from"./packem_shared/ttlFieldNotTimestamp-BFiRkSZD.mjs";import zo from"./packem_shared/unboundedStringArgument-DN8w1bg-.mjs";import Ho from"./packem_shared/unindexedForeignKey-DK4eWXkb.mjs";import Vo from"./packem_shared/unindexedRelationTarget-B5fFq1E8.mjs";import Bo from"./packem_shared/unrestrictedWhereBranch-YKiydie4.mjs";import Qo from"./packem_shared/userCreatingMutationWithoutCaptcha-DIeHIeTU.mjs";import Zo from"./packem_shared/vectorsNamespaceFromUserInput-Cyq5B2kF.mjs";import Jo from"./packem_shared/workflowDuplicateStepName-cXF6Rpvg.mjs";import Xo from"./packem_shared/workflowUnknownTarget-BzKlYSCg.mjs";import Yo from"./packem_shared/workflowUnused-D9fC9E9b.mjs";import{compareToBaseline as oe,parseAdvisorMap as re}from"./packem_shared/compareToBaseline-BwXFusQG.mjs";import{gradeFromScore as ee}from"./packem_shared/gradeFromScore-DW82YDVY.mjs";import{MAP_VERSION as ae,byCodepoint as me,scoreAdvisor as se}from"./packem_shared/MAP_VERSION-DxkFCiLX.mjs";import{default as pe}from"./packem_shared/classifySensitivity-B1kkm44P.mjs";import{fromServerSchema as le}from"./packem_shared/fromServerSchema-9aaK1J7g.mjs";const or={convex:"migrating/from-convex",firebase:"migrating/from-firebase",supabase:"migrating/from-supabase"},i={categories:["SCHEMA"],description:"A migrated-away platform's SDK is still imported from `lunora/` source. The code compiles and typechecks, so a half-finished port keeps reading from the old platform at runtime and the two stores silently drift apart.",facing:"INTERNAL",level:"WARN",name:"migration_stale_import",remediation:"Replace the call with its Lunora equivalent and drop the dependency. If the import is deliberate — a second data source you still read from — move it out of `lunora/` so it is not mistaken for an unfinished migration.",run:r=>r.staleMigrationImports===void 0?[]:r.staleMigrationImports.map(o=>mo(i,{cacheKey:`migration_stale_import:${o.file}:${o.line.toString()}:${o.moduleSpecifier}`,detail:`\`${o.file}\` (line ${o.line.toString()}) still imports \`${o.moduleSpecifier}\`. Finish the port — see \`${or[o.platform]}\` — or move the import out of \`lunora/\` if you genuinely still read from ${o.platform}.`,metadata:{file:o.file,line:o.line,moduleSpecifier:o.moduleSpecifier,platform:o.platform}})),source:"static",title:"Stale migration import"},rr=[X,Fo,xo,Xo,Jo,Po,E,G,K,D,N,q,z,O,qo,k,Ho,Vo,P,jo,Yo,To,L,_,Mo,so,no,Q,Wo,b,So,Co,eo,io,x,F,Ao,Bo,Qo,Do,Io,zo,H,Oo,d,$o,ro,vo,W,yo,Uo,Y,g,l,u,co,Go,oo,w,c,$,Zo,to,v,bo,M,C,I,T,y,A,U,R,J,ko,Ro,S,Lo,_o,Eo,Ko,V,B,wo,j,h,Z,ho,No,ao,uo,po,lo,fo,go,i],tr=[p,f,s,n],er=[...rr,...tr],Jt=(r,o={})=>{const a=o.lints??er,t=[];for(const e of a)o.source!==void 0&&e.source!==o.source||t.push(...e.run(r));return m(t)};export{er as ALL_LINTS,ae as MAP_VERSION,tr as RUNTIME_LINTS,rr as STATIC_LINTS,l as actionFetchSsrf,u as actionWithoutErrorHandling,d as adminRouteWithoutGuard,c as aiRawRunEscapeHatch,$ as aiRunWithoutLogging,h as aiToolSideEffectPromptInjection,g as aiUnboundedGenerationPublic,S as allowUnauthenticatedShardAccessEnabled,b as authApiCallWithoutHeaders,y as authCsrfCheckDisabled,U as authEmailVerificationDisabled,I as authScimWithoutTransactions,A as authSecureCookiesDisabled,R as authSessionFreshageZero,T as authTrustedOriginsWildcard,W as browserAllowPrivateTargets,v as browserUserUrlWithoutAllowlist,me as byCodepoint,k as circularFk,pe as classifySensitivity,oe as compareToBaseline,s as constraintValidator,w as containerInstanceKeyFromUserInput,x as containerOversizedInstance,F as containerPublicInternet,C as containerRuntimeEgressRelaxation,M as containerStartEnableInternetOverride,m as dedupeCacheKeys,P as duplicateIndex,D as emptyIndex,n as errorRateOutlier,N as errorWithoutCatalog,O as exportSinkMisconfigured,E as externalSourceIncrementalNoDeletePath,G as externalSourceOnGlobal,K as externalSourceUnscoped,L as filterOnPrimaryKey,_ as filterWithoutIndex,j as flagGatesSecurityWithUnsafeDefault,le as fromServerSchema,q as geoIndexFieldNotGeopoint,z as geoIndexUnused,ee as gradeFromScore,H as hardcodedSecret,p as hotShard,V as httpActionMissingAuthGuard,B as httpActionResponseHeaderInjection,Q as hyperdriveOutsideAction,Z as identityUndeclaredClaimTrusted,J as imagesUrlSourceFromUserInput,X as indexReferencesUnknownField,f as indexUtilization,Y as insertManyUnsafeUserData,oo as kvUnscopedUserKeyIdor,ro as mailInboundDispatchWithoutVerify,to as mailRecipientFromRequestInput,eo as maskUncoveredPiiColumn,io as maskWeakHashStrategyOnPii,ao as maskedRelationLeakViaWith,so as mutatorFullRowReplace,no as nondeterministicQueryMutation,po as normalizeIdUsedAsAuthorization,fo as notifyMissingPushConfig,lo as notifySendOutsideAction,uo as outputProjectionMissingOnPublicRead,co as ownerFieldFromArgsNotAuth,re as parseAdvisorMap,$o as paymentCreateWithoutAuthorize,ho as paymentWebhookWideTolerance,go as plaintextSecretInWranglerVariables,So as policyReferencesUnknownTable,bo as privilegedDispatchUnvalidatedPayload,yo as privilegedFanoutFromPublicProcedure,Uo as procedureWithoutStructuredEvent,Io as publicArgumentUsesAny,Ao as publicMutationWithoutRatelimit,Ro as publicTableRlsOptoutConfusion,To as queueWithoutDlq,Wo as r2sqlOutsideAction,vo as ratelimitDefaultMemoryStore,ko as ratelimitKeySpoofableOrGlobal,wo as ratelimitMiddlewareFailOpen,xo as relationReferencesUnknownField,Fo as relationReferencesUnknownTable,Co as rlsUncoveredTable,Jt as runAdvisor,se as scoreAdvisor,Mo as shapeTargetsGlobalTable,Po as shapeUnknownTable,Do as signupMutationWithoutDisposableGating,No as softDeleteIncludeDeletedFromArgs,Oo as sqlInjectionRisk,Eo as storageGenerateUploadUrlNoContentTypePin,Go as storageKeyFromUserArgs,Ko as storagePresignedUrlForPrivateContent,Lo as storageUploadWithoutContentTypeAllowlist,_o as storageUploadWithoutMaxSize,jo as tableWithoutInsert,qo as ttlFieldNotTimestamp,zo as unboundedStringArgument,Ho as unindexedForeignKey,Vo as unindexedRelationTarget,Bo as unrestrictedWhereBranch,Qo as userCreatingMutationWithoutCaptcha,Zo as vectorsNamespaceFromUserInput,Jo as workflowDuplicateStepName,Xo as workflowUnknownTarget,Yo as workflowUnused};
1
+ import{dedupeCacheKeys as m}from"./packem_shared/dedupeCacheKeys-7JgxaQWV.mjs";import s from"./packem_shared/constraintValidator-N339mfyx.mjs";import n from"./packem_shared/errorRateOutlier-CgK42sq0.mjs";import p from"./packem_shared/fanOutBreadth-DkloezYX.mjs";import f from"./packem_shared/hotShard-io-eF2Sx.mjs";import l from"./packem_shared/indexUtilization-QfbIH_w4.mjs";import u from"./packem_shared/actionFetchSsrf-BbWxy1Yf.mjs";import d from"./packem_shared/actionWithoutErrorHandling-rhzjCEqm.mjs";import c from"./packem_shared/adminRouteWithoutGuard-BbscPp1m.mjs";import $ from"./packem_shared/aiRawRunEscapeHatch-DfhjYm43.mjs";import h from"./packem_shared/aiRunWithoutLogging-B0K93Pga.mjs";import g from"./packem_shared/aiToolSideEffectPromptInjection-DnWQOoKi.mjs";import b from"./packem_shared/aiUnboundedGenerationPublic-iu7crnSa.mjs";import S from"./packem_shared/allowUnauthenticatedShardAccessEnabled-D4aMNBb0.mjs";import y from"./packem_shared/authApiCallWithoutHeaders-BHkik-EF.mjs";import U from"./packem_shared/authCsrfCheckDisabled-De9ammtV.mjs";import I from"./packem_shared/authEmailVerificationDisabled-BFKdJcx4.mjs";import A from"./packem_shared/authScimWithoutTransactions-DCtLXzks.mjs";import T from"./packem_shared/authSecureCookiesDisabled-B4WIzvMm.mjs";import R from"./packem_shared/authSessionFreshageZero-Bpcaf_Pe.mjs";import W from"./packem_shared/authTrustedOriginsWildcard-DjU9NXEm.mjs";import k from"./packem_shared/browserAllowPrivateTargets-Dxyeh6lg.mjs";import v from"./packem_shared/browserUserUrlWithoutAllowlist-BHBS6b0N.mjs";import w from"./packem_shared/circularFk-ZNjkhLaE.mjs";import x from"./packem_shared/containerInstanceKeyFromUserInput-C8S4T3ty.mjs";import F from"./packem_shared/containerOversizedInstance-B9wW_sU5.mjs";import C from"./packem_shared/containerPublicInternet-g0TRsayn.mjs";import M from"./packem_shared/containerRuntimeEgressRelaxation-BQ2ZD1aV.mjs";import P from"./packem_shared/containerStartEnableInternetOverride-B62WUura.mjs";import N from"./packem_shared/duplicateIndex-DFT7qLQD.mjs";import O from"./packem_shared/emptyIndex-Bp-Y81D0.mjs";import D from"./packem_shared/errorWithoutCatalog-0PbxiZL4.mjs";import E from"./packem_shared/exportSinkMisconfigured-DvpAaa6j.mjs";import G from"./packem_shared/externalSourceIncrementalNoDeletePath-DnoL64YY.mjs";import L from"./packem_shared/externalSourceOnGlobal-IYnALPlO.mjs";import K from"./packem_shared/externalSourceUnscoped-DqBp5jYr.mjs";import _ from"./packem_shared/filterOnPrimaryKey-Db947tQY.mjs";import j from"./packem_shared/filterWithoutIndex-pIpqk-O8.mjs";import q from"./packem_shared/flagGatesSecurityWithUnsafeDefault-DPGFEHTt.mjs";import z from"./packem_shared/geoIndexFieldNotGeopoint-DAGLZtaH.mjs";import H from"./packem_shared/geoIndexUnused-B5Oww9o2.mjs";import V from"./packem_shared/globalTableNearColumnLimit-DBQwb2MS.mjs";import B from"./packem_shared/hardcodedSecret-yu14ITlW.mjs";import Q from"./packem_shared/httpActionMissingAuthGuard-BZDdeW_D.mjs";import Z from"./packem_shared/httpActionResponseHeaderInjection-D063rB7U.mjs";import J from"./packem_shared/hyperdriveOutsideAction-B8ffQwgl.mjs";import X from"./packem_shared/identityUndeclaredClaimTrusted-BYRYGQ74.mjs";import Y from"./packem_shared/imagesUrlSourceFromUserInput-Cy5pc_dA.mjs";import oo from"./packem_shared/indexReferencesUnknownField-BPJjE0zg.mjs";import ro from"./packem_shared/insertManyUnsafeUserData-xLYAkcKj.mjs";import to from"./packem_shared/kvUnscopedUserKeyIdor-B4lGxRxh.mjs";import eo from"./packem_shared/mailInboundDispatchWithoutVerify-BivYJ5F9.mjs";import io from"./packem_shared/mailRecipientFromRequestInput-BR_oSh65.mjs";import ao from"./packem_shared/maskUncoveredPiiColumn-DqPfZM2O.mjs";import mo from"./packem_shared/maskWeakHashStrategyOnPii-DcEwc4Sz.mjs";import so from"./packem_shared/maskedRelationLeakViaWith-CxYk0MDW.mjs";import{i as no}from"./packem_shared/finding-BAVgqnCF.mjs";import po from"./packem_shared/mutatorFullRowReplace-CEgecSGm.mjs";import fo from"./packem_shared/nondeterministicQueryMutation-BZV_biUV.mjs";import lo from"./packem_shared/normalizeIdUsedAsAuthorization-FjISSXJm.mjs";import uo from"./packem_shared/notifyMissingPushConfig-C_GbVw3S.mjs";import co from"./packem_shared/notifySendOutsideAction-B9DcirhJ.mjs";import $o from"./packem_shared/outputProjectionMissingOnPublicRead-9Pm9766s.mjs";import ho from"./packem_shared/ownerFieldFromArgsNotAuth-D4K-_0aD.mjs";import go from"./packem_shared/paymentCreateWithoutAuthorize-CurtqN8K.mjs";import bo from"./packem_shared/paymentWebhookWideTolerance-I7ingfR8.mjs";import So from"./packem_shared/plaintextSecretInWranglerVariables-CmbygN6_.mjs";import yo from"./packem_shared/policyReferencesUnknownTable-D3WelAQa.mjs";import Uo from"./packem_shared/privilegedDispatchUnvalidatedPayload-74GuGye1.mjs";import Io from"./packem_shared/privilegedFanoutFromPublicProcedure-sMsZN4uP.mjs";import Ao from"./packem_shared/procedureWithoutStructuredEvent-l40nx9tX.mjs";import To from"./packem_shared/publicArgumentUsesAny-BzdcoJ9C.mjs";import Ro from"./packem_shared/publicMutationWithoutRatelimit-CozomYXw.mjs";import Wo from"./packem_shared/publicTableRlsOptoutConfusion-CaWtPGAn.mjs";import ko from"./packem_shared/queueWithoutDlq-BLY3iy9Q.mjs";import vo from"./packem_shared/r2sqlOutsideAction-DCMAsAeM.mjs";import wo from"./packem_shared/ratelimitDefaultMemoryStore-mOdI3Jmb.mjs";import xo from"./packem_shared/ratelimitKeySpoofableOrGlobal-DaGId_Fh.mjs";import Fo from"./packem_shared/ratelimitMiddlewareFailOpen-CTWVosEc.mjs";import Co from"./packem_shared/relationReferencesUnknownField-clqyB69Y.mjs";import Mo from"./packem_shared/relationReferencesUnknownTable-EOtKyaHx.mjs";import Po from"./packem_shared/rlsUncoveredTable-DYHgnoos.mjs";import No from"./packem_shared/shapeTargetsGlobalTable-SAlq2N-T.mjs";import Oo from"./packem_shared/shapeUnknownTable-DhvsbEtT.mjs";import Do from"./packem_shared/signupMutationWithoutDisposableGating-Tgv9SbsY.mjs";import Eo from"./packem_shared/softDeleteIncludeDeletedFromArgs-DgxpQHRA.mjs";import Go from"./packem_shared/sqlInjectionRisk-D2NaT-5c.mjs";import Lo from"./packem_shared/storageGenerateUploadUrlNoContentTypePin-C9cjl6Jh.mjs";import Ko from"./packem_shared/storageKeyFromUserArgs-CI-6kyte.mjs";import _o from"./packem_shared/storagePresignedUrlForPrivateContent-j7VhwIdu.mjs";import jo from"./packem_shared/storageUploadWithoutContentTypeAllowlist-oxKLecuf.mjs";import qo from"./packem_shared/storageUploadWithoutMaxSize-DUDxPutk.mjs";import zo from"./packem_shared/tableWithoutInsert-BV7qsPKx.mjs";import Ho from"./packem_shared/ttlFieldNotTimestamp-BFiRkSZD.mjs";import Vo from"./packem_shared/unboundedStringArgument-DN8w1bg-.mjs";import Bo from"./packem_shared/unindexedForeignKey-DK4eWXkb.mjs";import Qo from"./packem_shared/unindexedRelationTarget-B5fFq1E8.mjs";import Zo from"./packem_shared/unrestrictedWhereBranch-YKiydie4.mjs";import Jo from"./packem_shared/userCreatingMutationWithoutCaptcha-DIeHIeTU.mjs";import Xo from"./packem_shared/vectorsNamespaceFromUserInput-Cyq5B2kF.mjs";import Yo from"./packem_shared/workflowDuplicateStepName-cXF6Rpvg.mjs";import or from"./packem_shared/workflowUnknownTarget-BzKlYSCg.mjs";import rr from"./packem_shared/workflowUnused-D9fC9E9b.mjs";import{compareToBaseline as ie,parseAdvisorMap as ae}from"./packem_shared/compareToBaseline-BwXFusQG.mjs";import{gradeFromScore as se}from"./packem_shared/gradeFromScore-DW82YDVY.mjs";import{MAP_VERSION as pe,byCodepoint as fe,scoreAdvisor as le}from"./packem_shared/MAP_VERSION-DxkFCiLX.mjs";import{default as de}from"./packem_shared/classifySensitivity-B1kkm44P.mjs";import{fromServerSchema as $e}from"./packem_shared/fromServerSchema-9aaK1J7g.mjs";const tr={convex:"migrating/from-convex",firebase:"migrating/from-firebase",supabase:"migrating/from-supabase"},i={categories:["SCHEMA"],description:"A migrated-away platform's SDK is still imported from `lunora/` source. The code compiles and typechecks, so a half-finished port keeps reading from the old platform at runtime and the two stores silently drift apart.",facing:"INTERNAL",level:"WARN",name:"migration_stale_import",remediation:"Replace the call with its Lunora equivalent and drop the dependency. If the import is deliberate — a second data source you still read from — move it out of `lunora/` so it is not mistaken for an unfinished migration.",run:r=>r.staleMigrationImports===void 0?[]:r.staleMigrationImports.map(o=>no(i,{cacheKey:`migration_stale_import:${o.file}:${o.line.toString()}:${o.moduleSpecifier}`,detail:`\`${o.file}\` (line ${o.line.toString()}) still imports \`${o.moduleSpecifier}\`. Finish the port — see \`${tr[o.platform]}\` — or move the import out of \`lunora/\` if you genuinely still read from ${o.platform}.`,metadata:{file:o.file,line:o.line,moduleSpecifier:o.moduleSpecifier,platform:o.platform}})),source:"static",title:"Stale migration import"},er=[oo,Mo,Co,or,Yo,Oo,G,L,K,O,V,D,z,H,E,Ho,w,Bo,Qo,N,zo,rr,ko,_,j,No,po,fo,J,vo,y,yo,Po,ao,mo,F,C,Ro,Zo,Jo,Do,To,Vo,B,Go,c,go,eo,wo,k,Io,Ao,ro,b,u,d,ho,Ko,to,x,$,h,Xo,io,v,Uo,P,M,A,W,U,T,I,R,Y,xo,Wo,S,jo,qo,Lo,_o,Q,Z,Fo,q,g,X,bo,Eo,so,$o,lo,co,uo,So,i],ir=[f,l,s,n,p],ar=[...er,...ir],re=(r,o={})=>{const a=o.lints??ar,t=[];for(const e of a)o.source!==void 0&&e.source!==o.source||t.push(...e.run(r));return m(t)};export{ar as ALL_LINTS,pe as MAP_VERSION,ir as RUNTIME_LINTS,er as STATIC_LINTS,u as actionFetchSsrf,d as actionWithoutErrorHandling,c as adminRouteWithoutGuard,$ as aiRawRunEscapeHatch,h as aiRunWithoutLogging,g as aiToolSideEffectPromptInjection,b as aiUnboundedGenerationPublic,S as allowUnauthenticatedShardAccessEnabled,y as authApiCallWithoutHeaders,U as authCsrfCheckDisabled,I as authEmailVerificationDisabled,A as authScimWithoutTransactions,T as authSecureCookiesDisabled,R as authSessionFreshageZero,W as authTrustedOriginsWildcard,k as browserAllowPrivateTargets,v as browserUserUrlWithoutAllowlist,fe as byCodepoint,w as circularFk,de as classifySensitivity,ie as compareToBaseline,s as constraintValidator,x as containerInstanceKeyFromUserInput,F as containerOversizedInstance,C as containerPublicInternet,M as containerRuntimeEgressRelaxation,P as containerStartEnableInternetOverride,m as dedupeCacheKeys,N as duplicateIndex,O as emptyIndex,n as errorRateOutlier,D as errorWithoutCatalog,E as exportSinkMisconfigured,G as externalSourceIncrementalNoDeletePath,L as externalSourceOnGlobal,K as externalSourceUnscoped,p as fanOutBreadth,_ as filterOnPrimaryKey,j as filterWithoutIndex,q as flagGatesSecurityWithUnsafeDefault,$e as fromServerSchema,z as geoIndexFieldNotGeopoint,H as geoIndexUnused,V as globalTableNearColumnLimit,se as gradeFromScore,B as hardcodedSecret,f as hotShard,Q as httpActionMissingAuthGuard,Z as httpActionResponseHeaderInjection,J as hyperdriveOutsideAction,X as identityUndeclaredClaimTrusted,Y as imagesUrlSourceFromUserInput,oo as indexReferencesUnknownField,l as indexUtilization,ro as insertManyUnsafeUserData,to as kvUnscopedUserKeyIdor,eo as mailInboundDispatchWithoutVerify,io as mailRecipientFromRequestInput,ao as maskUncoveredPiiColumn,mo as maskWeakHashStrategyOnPii,so as maskedRelationLeakViaWith,po as mutatorFullRowReplace,fo as nondeterministicQueryMutation,lo as normalizeIdUsedAsAuthorization,uo as notifyMissingPushConfig,co as notifySendOutsideAction,$o as outputProjectionMissingOnPublicRead,ho as ownerFieldFromArgsNotAuth,ae as parseAdvisorMap,go as paymentCreateWithoutAuthorize,bo as paymentWebhookWideTolerance,So as plaintextSecretInWranglerVariables,yo as policyReferencesUnknownTable,Uo as privilegedDispatchUnvalidatedPayload,Io as privilegedFanoutFromPublicProcedure,Ao as procedureWithoutStructuredEvent,To as publicArgumentUsesAny,Ro as publicMutationWithoutRatelimit,Wo as publicTableRlsOptoutConfusion,ko as queueWithoutDlq,vo as r2sqlOutsideAction,wo as ratelimitDefaultMemoryStore,xo as ratelimitKeySpoofableOrGlobal,Fo as ratelimitMiddlewareFailOpen,Co as relationReferencesUnknownField,Mo as relationReferencesUnknownTable,Po as rlsUncoveredTable,re as runAdvisor,le as scoreAdvisor,No as shapeTargetsGlobalTable,Oo as shapeUnknownTable,Do as signupMutationWithoutDisposableGating,Eo as softDeleteIncludeDeletedFromArgs,Go as sqlInjectionRisk,Lo as storageGenerateUploadUrlNoContentTypePin,Ko as storageKeyFromUserArgs,_o as storagePresignedUrlForPrivateContent,jo as storageUploadWithoutContentTypeAllowlist,qo as storageUploadWithoutMaxSize,zo as tableWithoutInsert,Ho as ttlFieldNotTimestamp,Vo as unboundedStringArgument,Bo as unindexedForeignKey,Qo as unindexedRelationTarget,Zo as unrestrictedWhereBranch,Jo as userCreatingMutationWithoutCaptcha,Xo as vectorsNamespaceFromUserInput,Yo as workflowDuplicateStepName,or as workflowUnknownTarget,rr as workflowUnused};
@@ -0,0 +1 @@
1
+ import{i as n}from"./finding-BAVgqnCF.mjs";const s=1e3,o=500,d={categories:["PERFORMANCE"],description:"A shard set is wide enough that a cross-shard read over it would approach the per-invocation subrequest ceiling.",facing:"EXTERNAL",level:"WARN",name:"fan_out_breadth",remediation:"Keep reads shard-pinned, or roll cross-shard answers up through a `.global()` table.",run:i=>{const t=(i.shardTraffic??[]).filter(e=>e.requests>0);if(t.length===0)return[];const a=new Map;for(const e of t){const r=e.group??"";a.set(r,(a.get(r)??0)+1)}return[...a].filter(([,e])=>e>=o).map(([e,r])=>n(d,{cacheKey:`fan_out_breadth:${e}`,detail:`${e===""?"This deployment":`Shard group "${e}"`} has ${String(r)} active shards, so a cross-shard read over it would issue ${String(r)} Durable Object subrequests — against a ceiling of ${String(s)} per invocation on the Free plan (higher on Paid, but finite). Shard-pinned reads are unaffected.`,metadata:{freePlanCeiling:s,group:e,shards:r}}))},source:"runtime",title:"Shard set wide enough to strain a cross-shard read"};export{d as default};
@@ -0,0 +1 @@
1
+ import{i as n}from"./finding-BAVgqnCF.mjs";const t=100,i=2,o=90,s={categories:["SCHEMA"],description:"A `.global()` table is approaching D1's 100-column ceiling, past which it cannot be created.",facing:"INTERNAL",level:"WARN",name:"global_table_near_column_limit",remediation:"Split the table, or move the tail of its fields into one object field.",run:a=>a.schema.tables.filter(e=>e.shardKind==="global"&&e.fields.length+i>=o).map(e=>{const l=e.fields.length+i;return n(s,{cacheKey:`global_table_near_column_limit:${e.name}`,detail:`Global table "${e.name}" needs ${String(l)} columns (${String(e.fields.length)} fields plus id and _creationTime), against D1's limit of ${String(t)}.`,metadata:{columns:l,limit:t,table:e.name}})}),source:"static",title:"Global table near the column limit"};export{s as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/advisor",
3
- "version": "1.0.0-alpha.74",
3
+ "version": "1.0.0-alpha.76",
4
4
  "description": "Schema & query lints (splinter-style advisors) for Lunora, feeding the Studio Advisors view",
5
5
  "keywords": [
6
6
  "advisor",
@@ -46,8 +46,8 @@
46
46
  "access": "public"
47
47
  },
48
48
  "dependencies": {
49
- "@lunora/errors": "1.0.0-alpha.20",
50
- "@lunora/server": "1.0.0-alpha.70"
49
+ "@lunora/errors": "1.0.0-alpha.21",
50
+ "@lunora/server": "1.0.0-alpha.71"
51
51
  },
52
52
  "engines": {
53
53
  "node": "^22.15.0 || >=24.11.0"