@suss/extractor 0.36.0 → 0.37.0

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.cjs CHANGED
@@ -3837,8 +3837,23 @@ function detectGaps(raw, transitions, options) {
3837
3837
  if (raw.declaredContract && answersWithHttpResponses(raw)) {
3838
3838
  gaps.push(...contractStatusGaps(raw.declaredContract, transitions));
3839
3839
  }
3840
+ gaps.push(...unsettledJobGaps(transitions));
3840
3841
  return gaps;
3841
3842
  }
3843
+ function unsettledJobGaps(transitions) {
3844
+ const callees = /* @__PURE__ */ new Set();
3845
+ for (const transition of transitions) {
3846
+ for (const effect of transition.effects) {
3847
+ if (effect.type !== "interaction" || effect.interaction.class !== "message-send" || !(0, import_behavioral_ir10.isUnsettledJob)(effect.binding)) {
3848
+ continue;
3849
+ }
3850
+ callees.add(effect.callee ?? (0, import_behavioral_ir10.displayLabel)(effect.binding));
3851
+ }
3852
+ }
3853
+ return [...callees].map(
3854
+ (callee) => (0, import_behavioral_ir10.unfollowedCallGap)({ callee, reason: "unsettledJob" })
3855
+ );
3856
+ }
3842
3857
  function bodyWentUnread(raw) {
3843
3858
  if (raw.readFailure !== void 0) {
3844
3859
  return true;
package/dist/index.d.cts CHANGED
@@ -590,7 +590,26 @@ type DiscoveryMatch = {
590
590
  * side of the package-export boundary, whichever two they are.
591
591
  */
592
592
  workspaces?: true;
593
- } | TestCaseMatch;
593
+ } | CallbackArgumentMatch | TestCaseMatch;
594
+ /**
595
+ * A function handed to a call or construction of a library export, which
596
+ * the library then calls with work of its own. BullMQ's
597
+ * `new Worker("emails", async (job) => {...})` is the case it was written
598
+ * for: the processor becomes a unit, and a binding the pattern declares
599
+ * can read its channel off the same call with `callArgument`.
600
+ *
601
+ * `new X(...)` and `x(...)` both match. The function is followed the way
602
+ * any value is, so a processor written in another module and passed by
603
+ * name is found too. A function the run cannot settle to one body, such
604
+ * as a parameter or a file path the library loads itself, gives no unit.
605
+ */
606
+ interface CallbackArgumentMatch {
607
+ type: "callbackArgument";
608
+ importModule: string;
609
+ importName: string;
610
+ /** Which argument is the function. */
611
+ callbackPosition: number;
612
+ }
594
613
  /**
595
614
  * Test cases written as nested calls, the way vitest, jest and mocha
596
615
  * write them: `describe("orders", () => { it("cancels", () => ...) })`.
@@ -735,13 +754,18 @@ type BindingExtraction = {
735
754
  *
736
755
  * `decoratorArgument` reads the argument off the same decorator the
737
756
  * match selected the handler by, so `@EventPattern("order.placed")`
738
- * gives "order.placed". `literal` is for a wire whose channel the
739
- * library fixes. `unstated` means the wire is known and the channel is
740
- * not, and it pairs the same as a null channel.
757
+ * gives "order.placed". `callArgument` reads an argument of the call a
758
+ * `callbackArgument` match found the function in, so
759
+ * `new Worker("emails", fn)` gives "emails". `literal` is for a wire
760
+ * whose channel the library fixes. `unstated` means the wire is known
761
+ * and the channel is not, and it pairs the same as a null channel.
741
762
  */
742
763
  type ChannelSource = {
743
764
  from: "decoratorArgument";
744
765
  position: number;
766
+ } | {
767
+ from: "callArgument";
768
+ position: number;
745
769
  } | {
746
770
  from: "literal";
747
771
  value: string;
@@ -4237,4 +4261,4 @@ declare function rawConditionToPredicate(c: RawCondition): Predicate;
4237
4261
  declare function effectToIR(effect: RawEffect): Effect;
4238
4262
  declare function paramToInput(param: RawParameter): Input;
4239
4263
 
4240
- export { type AccessRecognizer, type AdapterCodeStamp, type AdapterStamp, type ArgumentParser, type AstCapableOps, type BindingExtraction, type BodyContent, type BranchEnding, CACHE_DIR_ENV, type CacheAttribution, type CacheDiagnostic, type CacheInput, type CacheLayer, type CacheLookup, type CallOps, type CaseGroup, type ChannelSource, type ChildrenOf, type ChosenReading, type ClassOps, type CodeHasher, type ConditionHandle, type ConditionInfo, type ConditionSource, type ConstructedFrom, type ContractPattern, type DeclaredBinding, type DeclaredBy, type DeclaredEntryPoint, type DeclaredEntryUnit, type DeclaredMatch, type DeclaredModule, type DeclaredStatusDecorators, type DefaultedReading, type DiscoveredCustomUnit, type DiscoveredSubUnit, type DiscoveredSubUnitParent, type DiscoveryMatch, type DiscoveryPattern, type EffectArg, type EffectSite, type EmptyStage, EnclosingNodes, type ExitKind, type ExtractionConfig, type ExtractionReport, type ExtractorOptions, type FailureDelivery, type GlobalPrefixCall, type HandOffSite, type HealthCheck, type HealthViolation, type HelperDeclarations, type HelperSearch, type HelperSink, type HelperValue, IdMap, IdSet, type Identified, type InputMappingPattern, type InputRead, type InvocationRecognizer, type KeepsArms, KeptParses, type LanguageAdapter, type LibraryEnvVars, type LoweredStatementParts, MAX_ENTRIES, MAX_HELPER_PATHS, MAX_PATHS, MODULE_SURFACE_RECOGNITION, type ModuleInitOptions, type NodeVisitor, type OpsCarrier, type PackConfigNeed, type PackDeclarations, type PackFailure, type PackFunnel, type PackGradient, type PackPathMissing, type PackTally, type ParameterSupplier, type ParsedNode, type PartialPlan, PathBudgetExceeded, type PatternPack, type PlacedEffect, type ProjectHelper, type ProjectHelpers, type RawBranch, type RawCodeStructure, type RawCondition, type RawDeclaredContract, type RawDependencyCall, type RawEffect, type RawParameter, type RawProvenance, type RawTerminal, type Reading, type ReceiverOrigin, type RedirectDelivery, type RedirectOption, type RegistrationHelper, type ResponsePropertyMapping, type ResponsePropertyMeaning, type RootRecord, type RouteVersioning, SKIP_CHILDREN, type SettledModule, type SourceRange, type SourceSpelling, type StatedSlot, type StatementBlock, type StatementReading, type StatementSites, type StructuredPathConditionsInput, type StructuredPathConditionsResult, type StructuredStatement, type TerminalExtraction, type TerminalMatch, type TerminalPattern, type TerminalPlacement, type TestCaseMatch, type Timer, type TimingReport, type TransparentWrapper, type UnitRecord, UnmodeledFlow, type UnsettledName, type ValueEntry, type ValueOps, type VersionPlacement, type WalkEnd, type WrapperMethodRegistration, type WrapperOptionRegistration, type WrapperRegistration, absentReading, ambiguousReading, andThenReading, assembleSummary, assessConfidence, buildUngatedExtractionReport, callSiteKey, chosenCacheRoot, commonDirectoryOf, composeWrappers, computeContentHash, computeDistHashFrom, configuredCallOption, createAdapterStamp, createCacheLayer, createCodeHasher, createPackTallies, createTimer, describeMissingPath, detectGaps, effectToIR, effectsFiringOn, emptyTally, enumerateOrDegrade, enumerateStructuredPaths, evaluatePackHealth, extractionCacheDirFor, extractionConfigStamp, firesOn, firstWrittenReading, formatPackHealth, guardsHoldOn, helperPathsOnVariables, httpRouteDiscovery, isListedTestFile, libraryEnvReadMarker, liveRecordFor, makeIgnoredDirectory, makeTransitionId, mapFolderFor, mapReading, markReturnsAsExitCode, matchesTestFileName, mergeReadShapes, moduleInitStructure, moduleOfFile, noopTimer, numberRepeatedCallSites, ownersWhereWritten, packConfigCheck, packGradients, packPathCheck, paramToInput, placeTerminals, processCodeHasher, projectFileStamp, rawConditionToPredicate, recordPackFailure, redirectDeliveryWhenSet, registrationHelperDiscovery, routeHelperIndex, runDigest, runsBefore, scopeOption, settleModules, sharedGatingConditions, sourceRefsOf, splitAtHandOffs, stampMayMissAWrite, stampModuleImports, stampModules, statementSites, storageSystemOption, summaryCountsByPack, tallyUnit, terminalToOutput, throughHelper, unreadableReading, unwrapJsonStringify, valueToReadFurtherFrom, walkDescendants, wrapperDiscovery, writtenReading };
4264
+ export { type AccessRecognizer, type AdapterCodeStamp, type AdapterStamp, type ArgumentParser, type AstCapableOps, type BindingExtraction, type BodyContent, type BranchEnding, CACHE_DIR_ENV, type CacheAttribution, type CacheDiagnostic, type CacheInput, type CacheLayer, type CacheLookup, type CallOps, type CallbackArgumentMatch, type CaseGroup, type ChannelSource, type ChildrenOf, type ChosenReading, type ClassOps, type CodeHasher, type ConditionHandle, type ConditionInfo, type ConditionSource, type ConstructedFrom, type ContractPattern, type DeclaredBinding, type DeclaredBy, type DeclaredEntryPoint, type DeclaredEntryUnit, type DeclaredMatch, type DeclaredModule, type DeclaredStatusDecorators, type DefaultedReading, type DiscoveredCustomUnit, type DiscoveredSubUnit, type DiscoveredSubUnitParent, type DiscoveryMatch, type DiscoveryPattern, type EffectArg, type EffectSite, type EmptyStage, EnclosingNodes, type ExitKind, type ExtractionConfig, type ExtractionReport, type ExtractorOptions, type FailureDelivery, type GlobalPrefixCall, type HandOffSite, type HealthCheck, type HealthViolation, type HelperDeclarations, type HelperSearch, type HelperSink, type HelperValue, IdMap, IdSet, type Identified, type InputMappingPattern, type InputRead, type InvocationRecognizer, type KeepsArms, KeptParses, type LanguageAdapter, type LibraryEnvVars, type LoweredStatementParts, MAX_ENTRIES, MAX_HELPER_PATHS, MAX_PATHS, MODULE_SURFACE_RECOGNITION, type ModuleInitOptions, type NodeVisitor, type OpsCarrier, type PackConfigNeed, type PackDeclarations, type PackFailure, type PackFunnel, type PackGradient, type PackPathMissing, type PackTally, type ParameterSupplier, type ParsedNode, type PartialPlan, PathBudgetExceeded, type PatternPack, type PlacedEffect, type ProjectHelper, type ProjectHelpers, type RawBranch, type RawCodeStructure, type RawCondition, type RawDeclaredContract, type RawDependencyCall, type RawEffect, type RawParameter, type RawProvenance, type RawTerminal, type Reading, type ReceiverOrigin, type RedirectDelivery, type RedirectOption, type RegistrationHelper, type ResponsePropertyMapping, type ResponsePropertyMeaning, type RootRecord, type RouteVersioning, SKIP_CHILDREN, type SettledModule, type SourceRange, type SourceSpelling, type StatedSlot, type StatementBlock, type StatementReading, type StatementSites, type StructuredPathConditionsInput, type StructuredPathConditionsResult, type StructuredStatement, type TerminalExtraction, type TerminalMatch, type TerminalPattern, type TerminalPlacement, type TestCaseMatch, type Timer, type TimingReport, type TransparentWrapper, type UnitRecord, UnmodeledFlow, type UnsettledName, type ValueEntry, type ValueOps, type VersionPlacement, type WalkEnd, type WrapperMethodRegistration, type WrapperOptionRegistration, type WrapperRegistration, absentReading, ambiguousReading, andThenReading, assembleSummary, assessConfidence, buildUngatedExtractionReport, callSiteKey, chosenCacheRoot, commonDirectoryOf, composeWrappers, computeContentHash, computeDistHashFrom, configuredCallOption, createAdapterStamp, createCacheLayer, createCodeHasher, createPackTallies, createTimer, describeMissingPath, detectGaps, effectToIR, effectsFiringOn, emptyTally, enumerateOrDegrade, enumerateStructuredPaths, evaluatePackHealth, extractionCacheDirFor, extractionConfigStamp, firesOn, firstWrittenReading, formatPackHealth, guardsHoldOn, helperPathsOnVariables, httpRouteDiscovery, isListedTestFile, libraryEnvReadMarker, liveRecordFor, makeIgnoredDirectory, makeTransitionId, mapFolderFor, mapReading, markReturnsAsExitCode, matchesTestFileName, mergeReadShapes, moduleInitStructure, moduleOfFile, noopTimer, numberRepeatedCallSites, ownersWhereWritten, packConfigCheck, packGradients, packPathCheck, paramToInput, placeTerminals, processCodeHasher, projectFileStamp, rawConditionToPredicate, recordPackFailure, redirectDeliveryWhenSet, registrationHelperDiscovery, routeHelperIndex, runDigest, runsBefore, scopeOption, settleModules, sharedGatingConditions, sourceRefsOf, splitAtHandOffs, stampMayMissAWrite, stampModuleImports, stampModules, statementSites, storageSystemOption, summaryCountsByPack, tallyUnit, terminalToOutput, throughHelper, unreadableReading, unwrapJsonStringify, valueToReadFurtherFrom, walkDescendants, wrapperDiscovery, writtenReading };
package/dist/index.d.ts CHANGED
@@ -590,7 +590,26 @@ type DiscoveryMatch = {
590
590
  * side of the package-export boundary, whichever two they are.
591
591
  */
592
592
  workspaces?: true;
593
- } | TestCaseMatch;
593
+ } | CallbackArgumentMatch | TestCaseMatch;
594
+ /**
595
+ * A function handed to a call or construction of a library export, which
596
+ * the library then calls with work of its own. BullMQ's
597
+ * `new Worker("emails", async (job) => {...})` is the case it was written
598
+ * for: the processor becomes a unit, and a binding the pattern declares
599
+ * can read its channel off the same call with `callArgument`.
600
+ *
601
+ * `new X(...)` and `x(...)` both match. The function is followed the way
602
+ * any value is, so a processor written in another module and passed by
603
+ * name is found too. A function the run cannot settle to one body, such
604
+ * as a parameter or a file path the library loads itself, gives no unit.
605
+ */
606
+ interface CallbackArgumentMatch {
607
+ type: "callbackArgument";
608
+ importModule: string;
609
+ importName: string;
610
+ /** Which argument is the function. */
611
+ callbackPosition: number;
612
+ }
594
613
  /**
595
614
  * Test cases written as nested calls, the way vitest, jest and mocha
596
615
  * write them: `describe("orders", () => { it("cancels", () => ...) })`.
@@ -735,13 +754,18 @@ type BindingExtraction = {
735
754
  *
736
755
  * `decoratorArgument` reads the argument off the same decorator the
737
756
  * match selected the handler by, so `@EventPattern("order.placed")`
738
- * gives "order.placed". `literal` is for a wire whose channel the
739
- * library fixes. `unstated` means the wire is known and the channel is
740
- * not, and it pairs the same as a null channel.
757
+ * gives "order.placed". `callArgument` reads an argument of the call a
758
+ * `callbackArgument` match found the function in, so
759
+ * `new Worker("emails", fn)` gives "emails". `literal` is for a wire
760
+ * whose channel the library fixes. `unstated` means the wire is known
761
+ * and the channel is not, and it pairs the same as a null channel.
741
762
  */
742
763
  type ChannelSource = {
743
764
  from: "decoratorArgument";
744
765
  position: number;
766
+ } | {
767
+ from: "callArgument";
768
+ position: number;
745
769
  } | {
746
770
  from: "literal";
747
771
  value: string;
@@ -4237,4 +4261,4 @@ declare function rawConditionToPredicate(c: RawCondition): Predicate;
4237
4261
  declare function effectToIR(effect: RawEffect): Effect;
4238
4262
  declare function paramToInput(param: RawParameter): Input;
4239
4263
 
4240
- export { type AccessRecognizer, type AdapterCodeStamp, type AdapterStamp, type ArgumentParser, type AstCapableOps, type BindingExtraction, type BodyContent, type BranchEnding, CACHE_DIR_ENV, type CacheAttribution, type CacheDiagnostic, type CacheInput, type CacheLayer, type CacheLookup, type CallOps, type CaseGroup, type ChannelSource, type ChildrenOf, type ChosenReading, type ClassOps, type CodeHasher, type ConditionHandle, type ConditionInfo, type ConditionSource, type ConstructedFrom, type ContractPattern, type DeclaredBinding, type DeclaredBy, type DeclaredEntryPoint, type DeclaredEntryUnit, type DeclaredMatch, type DeclaredModule, type DeclaredStatusDecorators, type DefaultedReading, type DiscoveredCustomUnit, type DiscoveredSubUnit, type DiscoveredSubUnitParent, type DiscoveryMatch, type DiscoveryPattern, type EffectArg, type EffectSite, type EmptyStage, EnclosingNodes, type ExitKind, type ExtractionConfig, type ExtractionReport, type ExtractorOptions, type FailureDelivery, type GlobalPrefixCall, type HandOffSite, type HealthCheck, type HealthViolation, type HelperDeclarations, type HelperSearch, type HelperSink, type HelperValue, IdMap, IdSet, type Identified, type InputMappingPattern, type InputRead, type InvocationRecognizer, type KeepsArms, KeptParses, type LanguageAdapter, type LibraryEnvVars, type LoweredStatementParts, MAX_ENTRIES, MAX_HELPER_PATHS, MAX_PATHS, MODULE_SURFACE_RECOGNITION, type ModuleInitOptions, type NodeVisitor, type OpsCarrier, type PackConfigNeed, type PackDeclarations, type PackFailure, type PackFunnel, type PackGradient, type PackPathMissing, type PackTally, type ParameterSupplier, type ParsedNode, type PartialPlan, PathBudgetExceeded, type PatternPack, type PlacedEffect, type ProjectHelper, type ProjectHelpers, type RawBranch, type RawCodeStructure, type RawCondition, type RawDeclaredContract, type RawDependencyCall, type RawEffect, type RawParameter, type RawProvenance, type RawTerminal, type Reading, type ReceiverOrigin, type RedirectDelivery, type RedirectOption, type RegistrationHelper, type ResponsePropertyMapping, type ResponsePropertyMeaning, type RootRecord, type RouteVersioning, SKIP_CHILDREN, type SettledModule, type SourceRange, type SourceSpelling, type StatedSlot, type StatementBlock, type StatementReading, type StatementSites, type StructuredPathConditionsInput, type StructuredPathConditionsResult, type StructuredStatement, type TerminalExtraction, type TerminalMatch, type TerminalPattern, type TerminalPlacement, type TestCaseMatch, type Timer, type TimingReport, type TransparentWrapper, type UnitRecord, UnmodeledFlow, type UnsettledName, type ValueEntry, type ValueOps, type VersionPlacement, type WalkEnd, type WrapperMethodRegistration, type WrapperOptionRegistration, type WrapperRegistration, absentReading, ambiguousReading, andThenReading, assembleSummary, assessConfidence, buildUngatedExtractionReport, callSiteKey, chosenCacheRoot, commonDirectoryOf, composeWrappers, computeContentHash, computeDistHashFrom, configuredCallOption, createAdapterStamp, createCacheLayer, createCodeHasher, createPackTallies, createTimer, describeMissingPath, detectGaps, effectToIR, effectsFiringOn, emptyTally, enumerateOrDegrade, enumerateStructuredPaths, evaluatePackHealth, extractionCacheDirFor, extractionConfigStamp, firesOn, firstWrittenReading, formatPackHealth, guardsHoldOn, helperPathsOnVariables, httpRouteDiscovery, isListedTestFile, libraryEnvReadMarker, liveRecordFor, makeIgnoredDirectory, makeTransitionId, mapFolderFor, mapReading, markReturnsAsExitCode, matchesTestFileName, mergeReadShapes, moduleInitStructure, moduleOfFile, noopTimer, numberRepeatedCallSites, ownersWhereWritten, packConfigCheck, packGradients, packPathCheck, paramToInput, placeTerminals, processCodeHasher, projectFileStamp, rawConditionToPredicate, recordPackFailure, redirectDeliveryWhenSet, registrationHelperDiscovery, routeHelperIndex, runDigest, runsBefore, scopeOption, settleModules, sharedGatingConditions, sourceRefsOf, splitAtHandOffs, stampMayMissAWrite, stampModuleImports, stampModules, statementSites, storageSystemOption, summaryCountsByPack, tallyUnit, terminalToOutput, throughHelper, unreadableReading, unwrapJsonStringify, valueToReadFurtherFrom, walkDescendants, wrapperDiscovery, writtenReading };
4264
+ export { type AccessRecognizer, type AdapterCodeStamp, type AdapterStamp, type ArgumentParser, type AstCapableOps, type BindingExtraction, type BodyContent, type BranchEnding, CACHE_DIR_ENV, type CacheAttribution, type CacheDiagnostic, type CacheInput, type CacheLayer, type CacheLookup, type CallOps, type CallbackArgumentMatch, type CaseGroup, type ChannelSource, type ChildrenOf, type ChosenReading, type ClassOps, type CodeHasher, type ConditionHandle, type ConditionInfo, type ConditionSource, type ConstructedFrom, type ContractPattern, type DeclaredBinding, type DeclaredBy, type DeclaredEntryPoint, type DeclaredEntryUnit, type DeclaredMatch, type DeclaredModule, type DeclaredStatusDecorators, type DefaultedReading, type DiscoveredCustomUnit, type DiscoveredSubUnit, type DiscoveredSubUnitParent, type DiscoveryMatch, type DiscoveryPattern, type EffectArg, type EffectSite, type EmptyStage, EnclosingNodes, type ExitKind, type ExtractionConfig, type ExtractionReport, type ExtractorOptions, type FailureDelivery, type GlobalPrefixCall, type HandOffSite, type HealthCheck, type HealthViolation, type HelperDeclarations, type HelperSearch, type HelperSink, type HelperValue, IdMap, IdSet, type Identified, type InputMappingPattern, type InputRead, type InvocationRecognizer, type KeepsArms, KeptParses, type LanguageAdapter, type LibraryEnvVars, type LoweredStatementParts, MAX_ENTRIES, MAX_HELPER_PATHS, MAX_PATHS, MODULE_SURFACE_RECOGNITION, type ModuleInitOptions, type NodeVisitor, type OpsCarrier, type PackConfigNeed, type PackDeclarations, type PackFailure, type PackFunnel, type PackGradient, type PackPathMissing, type PackTally, type ParameterSupplier, type ParsedNode, type PartialPlan, PathBudgetExceeded, type PatternPack, type PlacedEffect, type ProjectHelper, type ProjectHelpers, type RawBranch, type RawCodeStructure, type RawCondition, type RawDeclaredContract, type RawDependencyCall, type RawEffect, type RawParameter, type RawProvenance, type RawTerminal, type Reading, type ReceiverOrigin, type RedirectDelivery, type RedirectOption, type RegistrationHelper, type ResponsePropertyMapping, type ResponsePropertyMeaning, type RootRecord, type RouteVersioning, SKIP_CHILDREN, type SettledModule, type SourceRange, type SourceSpelling, type StatedSlot, type StatementBlock, type StatementReading, type StatementSites, type StructuredPathConditionsInput, type StructuredPathConditionsResult, type StructuredStatement, type TerminalExtraction, type TerminalMatch, type TerminalPattern, type TerminalPlacement, type TestCaseMatch, type Timer, type TimingReport, type TransparentWrapper, type UnitRecord, UnmodeledFlow, type UnsettledName, type ValueEntry, type ValueOps, type VersionPlacement, type WalkEnd, type WrapperMethodRegistration, type WrapperOptionRegistration, type WrapperRegistration, absentReading, ambiguousReading, andThenReading, assembleSummary, assessConfidence, buildUngatedExtractionReport, callSiteKey, chosenCacheRoot, commonDirectoryOf, composeWrappers, computeContentHash, computeDistHashFrom, configuredCallOption, createAdapterStamp, createCacheLayer, createCodeHasher, createPackTallies, createTimer, describeMissingPath, detectGaps, effectToIR, effectsFiringOn, emptyTally, enumerateOrDegrade, enumerateStructuredPaths, evaluatePackHealth, extractionCacheDirFor, extractionConfigStamp, firesOn, firstWrittenReading, formatPackHealth, guardsHoldOn, helperPathsOnVariables, httpRouteDiscovery, isListedTestFile, libraryEnvReadMarker, liveRecordFor, makeIgnoredDirectory, makeTransitionId, mapFolderFor, mapReading, markReturnsAsExitCode, matchesTestFileName, mergeReadShapes, moduleInitStructure, moduleOfFile, noopTimer, numberRepeatedCallSites, ownersWhereWritten, packConfigCheck, packGradients, packPathCheck, paramToInput, placeTerminals, processCodeHasher, projectFileStamp, rawConditionToPredicate, recordPackFailure, redirectDeliveryWhenSet, registrationHelperDiscovery, routeHelperIndex, runDigest, runsBefore, scopeOption, settleModules, sharedGatingConditions, sourceRefsOf, splitAtHandOffs, stampMayMissAWrite, stampModuleImports, stampModules, statementSites, storageSystemOption, summaryCountsByPack, tallyUnit, terminalToOutput, throughHelper, unreadableReading, unwrapJsonStringify, valueToReadFurtherFrom, walkDescendants, wrapperDiscovery, writtenReading };
package/dist/index.js CHANGED
@@ -1,10 +1,13 @@
1
1
  // src/index.ts
2
2
  import { createHash as createHash8 } from "crypto";
3
3
  import {
4
+ displayLabel as displayLabel2,
4
5
  effectKey as effectKey2,
5
6
  exchangesHttpResponses as exchangesHttpResponses2,
6
7
  foldRepeatedEffects,
8
+ isUnsettledJob,
7
9
  normalizeCalleeText as normalizeCalleeText2,
10
+ unfollowedCallGap,
8
11
  withGraphqlMetadata,
9
12
  withHttpMetadata,
10
13
  withMountMetadata,
@@ -3733,8 +3736,23 @@ function detectGaps(raw, transitions, options) {
3733
3736
  if (raw.declaredContract && answersWithHttpResponses(raw)) {
3734
3737
  gaps.push(...contractStatusGaps(raw.declaredContract, transitions));
3735
3738
  }
3739
+ gaps.push(...unsettledJobGaps(transitions));
3736
3740
  return gaps;
3737
3741
  }
3742
+ function unsettledJobGaps(transitions) {
3743
+ const callees = /* @__PURE__ */ new Set();
3744
+ for (const transition of transitions) {
3745
+ for (const effect of transition.effects) {
3746
+ if (effect.type !== "interaction" || effect.interaction.class !== "message-send" || !isUnsettledJob(effect.binding)) {
3747
+ continue;
3748
+ }
3749
+ callees.add(effect.callee ?? displayLabel2(effect.binding));
3750
+ }
3751
+ }
3752
+ return [...callees].map(
3753
+ (callee) => unfollowedCallGap({ callee, reason: "unsettledJob" })
3754
+ );
3755
+ }
3738
3756
  function bodyWentUnread(raw) {
3739
3757
  if (raw.readFailure !== void 0) {
3740
3758
  return true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suss/extractor",
3
- "version": "0.36.0",
3
+ "version": "0.37.0",
4
4
  "type": "module",
5
5
  "description": "The suss extraction pipeline, which turns what a language adapter read into the summaries the checker pairs across a boundary.",
6
6
  "keywords": [
@@ -46,7 +46,7 @@
46
46
  "typecheck": "tsc --noEmit"
47
47
  },
48
48
  "dependencies": {
49
- "@suss/behavioral-ir": "0.36.0",
49
+ "@suss/behavioral-ir": "0.37.0",
50
50
  "zod": "^4.0.0"
51
51
  },
52
52
  "devDependencies": {