@ttsc/unplugin 0.31.0 → 0.31.1

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.
Files changed (218) hide show
  1. package/lib/core/bun/bun.d.cts +3 -2
  2. package/lib/core/bun/bun.d.mts +3 -2
  3. package/lib/core/bun/bun.d.ts +3 -2
  4. package/lib/core/bun/bun.js +8 -4
  5. package/lib/core/bun/bun.js.map +1 -1
  6. package/lib/core/bun/bun.mjs +8 -4
  7. package/lib/core/bun/bun.mjs.map +1 -1
  8. package/lib/core/observer/createInputObserver.js +6 -5
  9. package/lib/core/observer/createInputObserver.js.map +1 -1
  10. package/lib/core/observer/createInputObserver.mjs +6 -5
  11. package/lib/core/observer/createInputObserver.mjs.map +1 -1
  12. package/lib/core/observer/openIsolatedRecursiveWatch.d.cts +11 -12
  13. package/lib/core/observer/openIsolatedRecursiveWatch.d.mts +11 -12
  14. package/lib/core/observer/openIsolatedRecursiveWatch.d.ts +11 -12
  15. package/lib/core/observer/openIsolatedRecursiveWatch.js +11 -12
  16. package/lib/core/observer/openIsolatedRecursiveWatch.js.map +1 -1
  17. package/lib/core/observer/openIsolatedRecursiveWatch.mjs +11 -12
  18. package/lib/core/observer/openIsolatedRecursiveWatch.mjs.map +1 -1
  19. package/lib/core/transform/cache/TtscCachedProjectTransform.d.cts +12 -3
  20. package/lib/core/transform/cache/TtscCachedProjectTransform.d.mts +12 -3
  21. package/lib/core/transform/cache/TtscCachedProjectTransform.d.ts +12 -3
  22. package/lib/core/transform/cache/selectCachedGenerationAction.d.cts +2 -0
  23. package/lib/core/transform/cache/selectCachedGenerationAction.d.mts +2 -0
  24. package/lib/core/transform/cache/selectCachedGenerationAction.d.ts +2 -0
  25. package/lib/core/transform/cache/selectCachedGenerationAction.js +1 -1
  26. package/lib/core/transform/cache/selectCachedGenerationAction.js.map +1 -1
  27. package/lib/core/transform/cache/selectCachedGenerationAction.mjs +1 -1
  28. package/lib/core/transform/cache/selectCachedGenerationAction.mjs.map +1 -1
  29. package/lib/core/transform/deliverCachedTransform.d.cts +36 -0
  30. package/lib/core/transform/deliverCachedTransform.d.mts +36 -0
  31. package/lib/core/transform/deliverCachedTransform.d.ts +36 -0
  32. package/lib/core/transform/deliverCachedTransform.js +73 -0
  33. package/lib/core/transform/deliverCachedTransform.js.map +1 -0
  34. package/lib/core/transform/deliverCachedTransform.mjs +71 -0
  35. package/lib/core/transform/deliverCachedTransform.mjs.map +1 -0
  36. package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.d.cts +2 -2
  37. package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.d.mts +2 -2
  38. package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.d.ts +2 -2
  39. package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.js +6 -2
  40. package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.js.map +1 -1
  41. package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.mjs +6 -2
  42. package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.mjs.map +1 -1
  43. package/lib/core/transform/envelope/selectExternalInputPaths.d.cts +3 -5
  44. package/lib/core/transform/envelope/selectExternalInputPaths.d.mts +3 -5
  45. package/lib/core/transform/envelope/selectExternalInputPaths.d.ts +3 -5
  46. package/lib/core/transform/envelope/selectExternalInputPaths.js +8 -7
  47. package/lib/core/transform/envelope/selectExternalInputPaths.js.map +1 -1
  48. package/lib/core/transform/envelope/selectExternalInputPaths.mjs +8 -7
  49. package/lib/core/transform/envelope/selectExternalInputPaths.mjs.map +1 -1
  50. package/lib/core/transform/filesystem/TtscTransformFilesystemOperations.d.cts +15 -12
  51. package/lib/core/transform/filesystem/TtscTransformFilesystemOperations.d.mts +15 -12
  52. package/lib/core/transform/filesystem/TtscTransformFilesystemOperations.d.ts +15 -12
  53. package/lib/core/transform/generation/selectTransformAttemptDisposition.d.cts +3 -1
  54. package/lib/core/transform/generation/selectTransformAttemptDisposition.d.mts +3 -1
  55. package/lib/core/transform/generation/selectTransformAttemptDisposition.d.ts +3 -1
  56. package/lib/core/transform/generation/selectTransformAttemptDisposition.js +3 -1
  57. package/lib/core/transform/generation/selectTransformAttemptDisposition.js.map +1 -1
  58. package/lib/core/transform/generation/selectTransformAttemptDisposition.mjs +3 -1
  59. package/lib/core/transform/generation/selectTransformAttemptDisposition.mjs.map +1 -1
  60. package/lib/core/transform/generation/transformProject.d.cts +9 -7
  61. package/lib/core/transform/generation/transformProject.d.mts +9 -7
  62. package/lib/core/transform/generation/transformProject.d.ts +9 -7
  63. package/lib/core/transform/generation/transformProject.js +14 -9
  64. package/lib/core/transform/generation/transformProject.js.map +1 -1
  65. package/lib/core/transform/generation/transformProject.mjs +14 -9
  66. package/lib/core/transform/generation/transformProject.mjs.map +1 -1
  67. package/lib/core/transform/inputs/preparePluginBuildEnvironments.d.cts +11 -4
  68. package/lib/core/transform/inputs/preparePluginBuildEnvironments.d.mts +11 -4
  69. package/lib/core/transform/inputs/preparePluginBuildEnvironments.d.ts +11 -4
  70. package/lib/core/transform/inputs/preparePluginBuildEnvironments.js +44 -7
  71. package/lib/core/transform/inputs/preparePluginBuildEnvironments.js.map +1 -1
  72. package/lib/core/transform/inputs/preparePluginBuildEnvironments.mjs +44 -7
  73. package/lib/core/transform/inputs/preparePluginBuildEnvironments.mjs.map +1 -1
  74. package/lib/core/transform/tracker/broker/WatchBroker.d.cts +14 -4
  75. package/lib/core/transform/tracker/broker/WatchBroker.d.mts +14 -4
  76. package/lib/core/transform/tracker/broker/WatchBroker.d.ts +14 -4
  77. package/lib/core/transform/tracker/broker/WatchBrokerTransport.d.cts +63 -0
  78. package/lib/core/transform/tracker/broker/WatchBrokerTransport.d.mts +63 -0
  79. package/lib/core/transform/tracker/broker/WatchBrokerTransport.d.ts +63 -0
  80. package/lib/core/transform/tracker/broker/WatchBrokerTransport.js +89 -0
  81. package/lib/core/transform/tracker/broker/WatchBrokerTransport.js.map +1 -0
  82. package/lib/core/transform/tracker/broker/WatchBrokerTransport.mjs +89 -0
  83. package/lib/core/transform/tracker/broker/WatchBrokerTransport.mjs.map +1 -0
  84. package/lib/core/transform/tracker/broker/drainWatchBroker.d.cts +8 -8
  85. package/lib/core/transform/tracker/broker/drainWatchBroker.d.mts +8 -8
  86. package/lib/core/transform/tracker/broker/drainWatchBroker.d.ts +8 -8
  87. package/lib/core/transform/tracker/broker/drainWatchBroker.js +12 -13
  88. package/lib/core/transform/tracker/broker/drainWatchBroker.js.map +1 -1
  89. package/lib/core/transform/tracker/broker/drainWatchBroker.mjs +12 -13
  90. package/lib/core/transform/tracker/broker/drainWatchBroker.mjs.map +1 -1
  91. package/lib/core/transform/tracker/broker/getWatchBroker.d.cts +18 -15
  92. package/lib/core/transform/tracker/broker/getWatchBroker.d.mts +18 -15
  93. package/lib/core/transform/tracker/broker/getWatchBroker.d.ts +18 -15
  94. package/lib/core/transform/tracker/broker/getWatchBroker.js +87 -17
  95. package/lib/core/transform/tracker/broker/getWatchBroker.js.map +1 -1
  96. package/lib/core/transform/tracker/broker/getWatchBroker.mjs +87 -17
  97. package/lib/core/transform/tracker/broker/getWatchBroker.mjs.map +1 -1
  98. package/lib/core/transform/tracker/broker/openBrokeredWatch.d.cts +5 -5
  99. package/lib/core/transform/tracker/broker/openBrokeredWatch.d.mts +5 -5
  100. package/lib/core/transform/tracker/broker/openBrokeredWatch.d.ts +5 -5
  101. package/lib/core/transform/tracker/broker/openBrokeredWatch.js +11 -14
  102. package/lib/core/transform/tracker/broker/openBrokeredWatch.js.map +1 -1
  103. package/lib/core/transform/tracker/broker/openBrokeredWatch.mjs +11 -14
  104. package/lib/core/transform/tracker/broker/openBrokeredWatch.mjs.map +1 -1
  105. package/lib/core/transform/tracker/broker/usesWatchBroker.d.cts +7 -7
  106. package/lib/core/transform/tracker/broker/usesWatchBroker.d.mts +7 -7
  107. package/lib/core/transform/tracker/broker/usesWatchBroker.d.ts +7 -7
  108. package/lib/core/transform/tracker/broker/usesWatchBroker.js +7 -7
  109. package/lib/core/transform/tracker/broker/usesWatchBroker.mjs +7 -7
  110. package/lib/core/transform/tracker/broker/watchBrokerSource.d.cts +9 -10
  111. package/lib/core/transform/tracker/broker/watchBrokerSource.d.mts +9 -10
  112. package/lib/core/transform/tracker/broker/watchBrokerSource.d.ts +9 -10
  113. package/lib/core/transform/tracker/broker/watchBrokerSource.js +10 -11
  114. package/lib/core/transform/tracker/broker/watchBrokerSource.js.map +1 -1
  115. package/lib/core/transform/tracker/broker/watchBrokerSource.mjs +10 -11
  116. package/lib/core/transform/tracker/broker/watchBrokerSource.mjs.map +1 -1
  117. package/lib/core/transform/transformTtsc.d.cts +7 -4
  118. package/lib/core/transform/transformTtsc.d.mts +7 -4
  119. package/lib/core/transform/transformTtsc.d.ts +7 -4
  120. package/lib/core/transform/transformTtsc.js +37 -92
  121. package/lib/core/transform/transformTtsc.js.map +1 -1
  122. package/lib/core/transform/transformTtsc.mjs +37 -92
  123. package/lib/core/transform/transformTtsc.mjs.map +1 -1
  124. package/lib/core/transform/validation/TtscGenerationProof.d.cts +105 -0
  125. package/lib/core/transform/validation/TtscGenerationProof.d.mts +105 -0
  126. package/lib/core/transform/validation/TtscGenerationProof.d.ts +105 -0
  127. package/lib/core/transform/validation/TtscGenerationProof.js +149 -0
  128. package/lib/core/transform/validation/TtscGenerationProof.js.map +1 -0
  129. package/lib/core/transform/validation/TtscGenerationProof.mjs +149 -0
  130. package/lib/core/transform/validation/TtscGenerationProof.mjs.map +1 -0
  131. package/lib/core/transform/validation/matchesCachedSource.d.cts +18 -15
  132. package/lib/core/transform/validation/matchesCachedSource.d.mts +18 -15
  133. package/lib/core/transform/validation/matchesCachedSource.d.ts +18 -15
  134. package/lib/core/transform/validation/matchesCachedSource.js +28 -22
  135. package/lib/core/transform/validation/matchesCachedSource.js.map +1 -1
  136. package/lib/core/transform/validation/matchesCachedSource.mjs +28 -22
  137. package/lib/core/transform/validation/matchesCachedSource.mjs.map +1 -1
  138. package/lib/core/transform/validation/matchesCompleteInputSnapshot.d.cts +3 -2
  139. package/lib/core/transform/validation/matchesCompleteInputSnapshot.d.mts +3 -2
  140. package/lib/core/transform/validation/matchesCompleteInputSnapshot.d.ts +3 -2
  141. package/lib/core/transform/validation/matchesCompleteInputSnapshot.js +4 -4
  142. package/lib/core/transform/validation/matchesCompleteInputSnapshot.js.map +1 -1
  143. package/lib/core/transform/validation/matchesCompleteInputSnapshot.mjs +4 -4
  144. package/lib/core/transform/validation/matchesCompleteInputSnapshot.mjs.map +1 -1
  145. package/lib/core/transform/validation/matchesNarrowPersistentInputs.d.cts +2 -1
  146. package/lib/core/transform/validation/matchesNarrowPersistentInputs.d.mts +2 -1
  147. package/lib/core/transform/validation/matchesNarrowPersistentInputs.d.ts +2 -1
  148. package/lib/core/transform/validation/matchesNarrowPersistentInputs.js +2 -2
  149. package/lib/core/transform/validation/matchesNarrowPersistentInputs.js.map +1 -1
  150. package/lib/core/transform/validation/matchesNarrowPersistentInputs.mjs +2 -2
  151. package/lib/core/transform/validation/matchesNarrowPersistentInputs.mjs.map +1 -1
  152. package/lib/core/transform/validation/matchesUniversalHostInputTrees.d.cts +3 -2
  153. package/lib/core/transform/validation/matchesUniversalHostInputTrees.d.mts +3 -2
  154. package/lib/core/transform/validation/matchesUniversalHostInputTrees.d.ts +3 -2
  155. package/lib/core/transform/validation/matchesUniversalHostInputTrees.js +5 -3
  156. package/lib/core/transform/validation/matchesUniversalHostInputTrees.js.map +1 -1
  157. package/lib/core/transform/validation/matchesUniversalHostInputTrees.mjs +5 -3
  158. package/lib/core/transform/validation/matchesUniversalHostInputTrees.mjs.map +1 -1
  159. package/lib/core/transform/validation/matchesUniversalHostInputs.d.cts +3 -2
  160. package/lib/core/transform/validation/matchesUniversalHostInputs.d.mts +3 -2
  161. package/lib/core/transform/validation/matchesUniversalHostInputs.d.ts +3 -2
  162. package/lib/core/transform/validation/matchesUniversalHostInputs.js +5 -5
  163. package/lib/core/transform/validation/matchesUniversalHostInputs.js.map +1 -1
  164. package/lib/core/transform/validation/matchesUniversalHostInputs.mjs +5 -5
  165. package/lib/core/transform/validation/matchesUniversalHostInputs.mjs.map +1 -1
  166. package/lib/core/transform/validation/nativeInputPredicatesHold.d.cts +5 -4
  167. package/lib/core/transform/validation/nativeInputPredicatesHold.d.mts +5 -4
  168. package/lib/core/transform/validation/nativeInputPredicatesHold.d.ts +5 -4
  169. package/lib/core/transform/validation/nativeInputPredicatesHold.js +31 -12
  170. package/lib/core/transform/validation/nativeInputPredicatesHold.js.map +1 -1
  171. package/lib/core/transform/validation/nativeInputPredicatesHold.mjs +31 -12
  172. package/lib/core/transform/validation/nativeInputPredicatesHold.mjs.map +1 -1
  173. package/lib/core/transform/validation/notificationsProveProgramUnchanged.d.cts +2 -1
  174. package/lib/core/transform/validation/notificationsProveProgramUnchanged.d.mts +2 -1
  175. package/lib/core/transform/validation/notificationsProveProgramUnchanged.d.ts +2 -1
  176. package/lib/core/transform/validation/notificationsProveProgramUnchanged.js +2 -2
  177. package/lib/core/transform/validation/notificationsProveProgramUnchanged.js.map +1 -1
  178. package/lib/core/transform/validation/notificationsProveProgramUnchanged.mjs +2 -2
  179. package/lib/core/transform/validation/notificationsProveProgramUnchanged.mjs.map +1 -1
  180. package/lib/core/transform/watch/notifyWatchInputs.js +3 -0
  181. package/lib/core/transform/watch/notifyWatchInputs.js.map +1 -1
  182. package/lib/core/transform/watch/notifyWatchInputs.mjs +3 -0
  183. package/lib/core/transform/watch/notifyWatchInputs.mjs.map +1 -1
  184. package/lib/core/turbopack/turbopack.js +2 -1
  185. package/lib/core/turbopack/turbopack.js.map +1 -1
  186. package/lib/core/turbopack/turbopack.mjs +2 -1
  187. package/lib/core/turbopack/turbopack.mjs.map +1 -1
  188. package/package.json +3 -3
  189. package/src/core/bun/bun.ts +8 -4
  190. package/src/core/observer/createInputObserver.ts +6 -5
  191. package/src/core/observer/openIsolatedRecursiveWatch.ts +11 -12
  192. package/src/core/transform/cache/TtscCachedProjectTransform.ts +13 -3
  193. package/src/core/transform/cache/selectCachedGenerationAction.ts +9 -1
  194. package/src/core/transform/deliverCachedTransform.ts +97 -0
  195. package/src/core/transform/envelope/selectDeclaredProjectInputKeys.ts +5 -2
  196. package/src/core/transform/envelope/selectExternalInputPaths.ts +7 -7
  197. package/src/core/transform/filesystem/TtscTransformFilesystemOperations.ts +15 -12
  198. package/src/core/transform/generation/selectTransformAttemptDisposition.ts +3 -1
  199. package/src/core/transform/generation/transformProject.ts +13 -9
  200. package/src/core/transform/inputs/preparePluginBuildEnvironments.ts +41 -7
  201. package/src/core/transform/tracker/broker/WatchBroker.ts +15 -4
  202. package/src/core/transform/tracker/broker/WatchBrokerTransport.ts +82 -0
  203. package/src/core/transform/tracker/broker/drainWatchBroker.ts +12 -13
  204. package/src/core/transform/tracker/broker/getWatchBroker.ts +89 -18
  205. package/src/core/transform/tracker/broker/openBrokeredWatch.ts +11 -14
  206. package/src/core/transform/tracker/broker/usesWatchBroker.ts +7 -7
  207. package/src/core/transform/tracker/broker/watchBrokerSource.ts +10 -11
  208. package/src/core/transform/transformTtsc.ts +36 -92
  209. package/src/core/transform/validation/TtscGenerationProof.ts +201 -0
  210. package/src/core/transform/validation/matchesCachedSource.ts +27 -21
  211. package/src/core/transform/validation/matchesCompleteInputSnapshot.ts +5 -3
  212. package/src/core/transform/validation/matchesNarrowPersistentInputs.ts +3 -1
  213. package/src/core/transform/validation/matchesUniversalHostInputTrees.ts +6 -2
  214. package/src/core/transform/validation/matchesUniversalHostInputs.ts +6 -4
  215. package/src/core/transform/validation/nativeInputPredicatesHold.ts +36 -14
  216. package/src/core/transform/validation/notificationsProveProgramUnchanged.ts +3 -1
  217. package/src/core/transform/watch/notifyWatchInputs.ts +3 -0
  218. package/src/core/turbopack/turbopack.ts +2 -1
@@ -61,18 +61,20 @@ var selectTransformAttemptDisposition = require('./selectTransformAttemptDisposi
61
61
  * (samchon/ttsc#1545).
62
62
  *
63
63
  * A local success whose only lost premise is explicitly unavailable host
64
- * observation may qualify for its initiating delivery. The delivery coordinator
65
- * additionally requires an explicitly nonwatching host with cache-withdrawal
66
- * capability. It remains incomplete and cannot authorize resident, shared or
67
- * persistent caching. Actual changes, conflicts and unexplained missing proof
68
- * retain the stabilization gate.
64
+ * observation may qualify for local delivery. TtscGenerationProof additionally
65
+ * requires an explicitly nonwatching host and actual cache withdrawal for every
66
+ * delivery. It alone can share recorded first-module baselines inside the same
67
+ * explicit pass. This incomplete result cannot authorize ordinary resident
68
+ * reuse, a persistent project record or shared publication; repeated modules
69
+ * and later passes recapture. Actual changes, conflicts and unexplained missing
70
+ * proof retain the stabilization gate.
69
71
  *
70
72
  * Enabled private tracing records each computed disposition before its state is
71
73
  * applied. It does not supply proof when capture throws or tracing fails.
72
74
  *
73
- * @evidence contracts/common.md#principled-implementation Each capture establishes config coherence and reusable success proof or a current diagnostic verdict; a local stable success with only explicit unavailable host observations instead transfers one fresh delivery without reuse authority, while mixed mutation, missing or conflicting proof retains retry admission.
75
+ * @evidence contracts/common.md#principled-implementation Each capture establishes config coherence and reusable success proof or a current diagnostic verdict; a local stable success with only explicit unavailable host observations instead transfers an incomplete local result whose bounded first deliveries require the common nonwatching pass owner, while mixed mutation, missing or conflicting proof retains retry admission.
74
76
  * @evidence contracts/common.md#clear-and-simple-design The pure attempt policy selects acceptance and retry budgets; this loop owns mutable learned facts and resource handoff, capture owns proof construction, and the shared error builder owns terminal rendering and final disposal.
75
- * @evidence contracts/common.md#prohibited-implementation-shortcuts Retrying follows learned dependencies/case policy or refuted publication payload rather than an endless workaround chain; only lossless producer-authorized observation unavailability can permit a local fresh answer, and it never becomes a reusable success or excuses actual mutation.
77
+ * @evidence contracts/common.md#prohibited-implementation-shortcuts Retrying follows learned dependencies/case policy or refuted publication payload rather than an endless workaround chain; only lossless producer-authorized observation unavailability can permit a local fresh answer, and it never becomes complete or persistent/shared success proof or excuses actual mutation.
76
78
  * @evidence contracts/common.md#meaningful-documentation Native paragraphs explain movement versus absolute budgets, failed-compile diagnostics and learned facts; separated props state delivery, tracking and inherited witness meaning.
77
79
  * @evidence contracts/portability.md#os-neutral-implementation Each capture delegates native filesystem and compiler behavior to injected host boundaries; reported compiler case policy is carried between attempts rather than guessed from OS names.
78
80
  * @evidence contracts/performance.md#efficient-algorithms At most four captures bound retry count, not each capture's project/config/input bytes, native walks, compiler/plugin work, observer setup or session waiting time. Each rejected attempt copies the cumulative witnessed Set and scans its external dependencies into that copy; the next capture receives a separate array of its names; supplied spellings contribute hashing/text cost. Terminal rendering visits retained attempts/witnesses, and disposal delegates observer/probe cleanup rather than making those effects constant work. Enabled tracing serializes disposition scalars and path text through the existing bounded append sink; disabled tracing skips that payload construction.
@@ -128,10 +130,13 @@ async function transformProject(props) {
128
130
  },
129
131
  });
130
132
  if (disposition.freshDeliveryOnly) {
131
- // Neither incomplete diagnostic observations nor a permitted local fresh
132
- // success authorizes this generation's reuse beyond its current delivery.
133
+ // Missing observations never authorize persistent or shared reuse. A
134
+ // coherent fresh-only local success may separately earn bounded first
135
+ // deliveries through the common nonwatching pass owner (#1713).
133
136
  cached.freshDeliveryOnly = true;
134
137
  }
138
+ if (disposition.kind === "fresh-only")
139
+ cached.passDeliveryOnly = true;
135
140
  if (disposition.kind === "accepted" || disposition.kind === "fresh-only") {
136
141
  return cached;
137
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transformProject.js","sources":["../../../../src/core/transform/generation/transformProject.ts"],"sourcesContent":[null],"names":["traceInvocation","captureTransformGeneration","selectTransformAttemptDisposition","TRANSFORM_GENERATION_FAILURES","TRANSFORM_ADOPTED_RESULTS","carryTransformAttemptInputs","TRANSFORM_FAILED_GENERATION_VALIDATIONS","disposeCachedTransform","createUnstableGenerationError"],"mappings":";;;;;;;;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEG;AACI,eAAe,gBAAgB,CAAC,KAkEtC,EAAA;AACC,IAAA,MAAM,YAAY,GAAGA,+BAAe,EAAE;IACtC,MAAM,QAAQ,GAAkC,EAAE;AAClD,IAAA,IAAI,QAA4B;IAChC,IAAI,KAAK,GAAG,CAAC;IACb,IAAI,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC;AACpD,IAAA,IAAI,yBAAyB,GAAG,KAAK,CAAC,yBAAyB;IAC/D,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE;AACpC,QAAA,MAAM,MAAM,GAAG,MAAMC,qDAA0B,CAAC;AAC9C,YAAA,GAAG,KAAK;YACR,QAAQ;YACR,yBAAyB;AACzB,YAAA,qBAAqB,EAAE,CAAC,GAAG,SAAS,CAAC;AACtC,SAAA,CAAC;QACF,MAAM,WAAW,GAAGC,mEAAiC,CAAC;AACpD,YAAA,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YAC9B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YAC/C,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;YACvD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;AACzC,YAAA,oBAAoB,EAClB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK;AACrB,kBAAE,MAAM,CAAC,MAAM,CAAC;AAChB,kBAAE,SAAS;AACf,YAAA,0BAA0B,EACxB,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK;AACrB,kBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;AAC1D,kBAAE,CAAC;YACP,QAAQ,EAAEC,2DAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAC1D,OAAO,EAAEC,mDAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YACrD,OAAO;YACP,KAAK;YACL,QAAQ;AACT,SAAA,CAAC;QACF,YAAY,GAAG,4BAA4B,EAAE;YAC3C,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,MAAM,CAAC,WAAW;AACvB,YAAA,IAAI,EAAE;gBACJ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,OAAO;AACP,gBAAA,WAAW,EAAE,KAAK;gBAClB,cAAc,EAAE,QAAQ,IAAI,IAAI;gBAChC,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;AAChD,gBAAA,UAAU,EAAE,OAAO,IAAI,WAAW,GAAG,WAAW,CAAC,KAAK,GAAG,IAAI;AAC7D,gBAAA,aAAa,EACX,UAAU,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI;AACpE,aAAA;AACF,SAAA,CAAC;AACF,QAAA,IAAI,WAAW,CAAC,iBAAiB,EAAE;;;AAGjC,YAAA,MAAM,CAAC,iBAAiB,GAAG,IAAI;QACjC;AACA,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,UAAU,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,EAAE;AACxE,YAAA,OAAO,MAAM;QACf;AACA,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QACnC,MAAM,UAAU,GAAGC,uDAA2B,CAC5C,SAAS,EACT,yBAAyB,EACzB,MAAM,CACP;AACD,QAAA,SAAS,GAAG,UAAU,CAAC,SAAS;AAChC,QAAA,yBAAyB,GAAG,UAAU,CAAC,yBAAyB;;;;;;;;AAQhE,QAAA,QAAQ,GAAG,WAAW,CAAC,QAAQ;AAC/B,QAAA,KAAK,GAAG,WAAW,CAAC,KAAK;;;AAGzB,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,EAAE;AACrC,YAAA,OAAO,MAAM;QACf;AACA,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE;YACnC,MAAM,UAAU,GAAGC,+EAAuC,CAAC,GAAG,CAC5D,MAAM,CAAC,MAAM,CACd;AACD,YAAA,IAAI,UAAU,KAAK,SAAS,EAAE;gBAC5BC,6CAAsB,CAAC,MAAM,CAAC;AAC9B,gBAAA,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE;YACH;AACA,YAAA,MAAMC,2DAA6B,CACjC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EACjD,QAAQ,EACR,UAAU,CACX;QACH;QACAD,6CAAsB,CAAC,MAAM,CAAC;IAChC;AACF;;;;"}
1
+ {"version":3,"file":"transformProject.js","sources":["../../../../src/core/transform/generation/transformProject.ts"],"sourcesContent":[null],"names":["traceInvocation","captureTransformGeneration","selectTransformAttemptDisposition","TRANSFORM_GENERATION_FAILURES","TRANSFORM_ADOPTED_RESULTS","carryTransformAttemptInputs","TRANSFORM_FAILED_GENERATION_VALIDATIONS","disposeCachedTransform","createUnstableGenerationError"],"mappings":"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"}
@@ -59,18 +59,20 @@ import { selectTransformAttemptDisposition } from './selectTransformAttemptDispo
59
59
  * (samchon/ttsc#1545).
60
60
  *
61
61
  * A local success whose only lost premise is explicitly unavailable host
62
- * observation may qualify for its initiating delivery. The delivery coordinator
63
- * additionally requires an explicitly nonwatching host with cache-withdrawal
64
- * capability. It remains incomplete and cannot authorize resident, shared or
65
- * persistent caching. Actual changes, conflicts and unexplained missing proof
66
- * retain the stabilization gate.
62
+ * observation may qualify for local delivery. TtscGenerationProof additionally
63
+ * requires an explicitly nonwatching host and actual cache withdrawal for every
64
+ * delivery. It alone can share recorded first-module baselines inside the same
65
+ * explicit pass. This incomplete result cannot authorize ordinary resident
66
+ * reuse, a persistent project record or shared publication; repeated modules
67
+ * and later passes recapture. Actual changes, conflicts and unexplained missing
68
+ * proof retain the stabilization gate.
67
69
  *
68
70
  * Enabled private tracing records each computed disposition before its state is
69
71
  * applied. It does not supply proof when capture throws or tracing fails.
70
72
  *
71
- * @evidence contracts/common.md#principled-implementation Each capture establishes config coherence and reusable success proof or a current diagnostic verdict; a local stable success with only explicit unavailable host observations instead transfers one fresh delivery without reuse authority, while mixed mutation, missing or conflicting proof retains retry admission.
73
+ * @evidence contracts/common.md#principled-implementation Each capture establishes config coherence and reusable success proof or a current diagnostic verdict; a local stable success with only explicit unavailable host observations instead transfers an incomplete local result whose bounded first deliveries require the common nonwatching pass owner, while mixed mutation, missing or conflicting proof retains retry admission.
72
74
  * @evidence contracts/common.md#clear-and-simple-design The pure attempt policy selects acceptance and retry budgets; this loop owns mutable learned facts and resource handoff, capture owns proof construction, and the shared error builder owns terminal rendering and final disposal.
73
- * @evidence contracts/common.md#prohibited-implementation-shortcuts Retrying follows learned dependencies/case policy or refuted publication payload rather than an endless workaround chain; only lossless producer-authorized observation unavailability can permit a local fresh answer, and it never becomes a reusable success or excuses actual mutation.
75
+ * @evidence contracts/common.md#prohibited-implementation-shortcuts Retrying follows learned dependencies/case policy or refuted publication payload rather than an endless workaround chain; only lossless producer-authorized observation unavailability can permit a local fresh answer, and it never becomes complete or persistent/shared success proof or excuses actual mutation.
74
76
  * @evidence contracts/common.md#meaningful-documentation Native paragraphs explain movement versus absolute budgets, failed-compile diagnostics and learned facts; separated props state delivery, tracking and inherited witness meaning.
75
77
  * @evidence contracts/portability.md#os-neutral-implementation Each capture delegates native filesystem and compiler behavior to injected host boundaries; reported compiler case policy is carried between attempts rather than guessed from OS names.
76
78
  * @evidence contracts/performance.md#efficient-algorithms At most four captures bound retry count, not each capture's project/config/input bytes, native walks, compiler/plugin work, observer setup or session waiting time. Each rejected attempt copies the cumulative witnessed Set and scans its external dependencies into that copy; the next capture receives a separate array of its names; supplied spellings contribute hashing/text cost. Terminal rendering visits retained attempts/witnesses, and disposal delegates observer/probe cleanup rather than making those effects constant work. Enabled tracing serializes disposition scalars and path text through the existing bounded append sink; disabled tracing skips that payload construction.
@@ -126,10 +128,13 @@ async function transformProject(props) {
126
128
  },
127
129
  });
128
130
  if (disposition.freshDeliveryOnly) {
129
- // Neither incomplete diagnostic observations nor a permitted local fresh
130
- // success authorizes this generation's reuse beyond its current delivery.
131
+ // Missing observations never authorize persistent or shared reuse. A
132
+ // coherent fresh-only local success may separately earn bounded first
133
+ // deliveries through the common nonwatching pass owner (#1713).
131
134
  cached.freshDeliveryOnly = true;
132
135
  }
136
+ if (disposition.kind === "fresh-only")
137
+ cached.passDeliveryOnly = true;
133
138
  if (disposition.kind === "accepted" || disposition.kind === "fresh-only") {
134
139
  return cached;
135
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transformProject.mjs","sources":["../../../../src/core/transform/generation/transformProject.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transformProject.mjs","sources":["../../../../src/core/transform/generation/transformProject.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,23 +1,30 @@
1
1
  import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTransform.cjs";
2
2
  import type { TtscTransformFilesystemOperations } from "../filesystem/TtscTransformFilesystemOperations.cjs";
3
3
  /**
4
- * Prepare actual plugin toolchain authority before synchronous input proofs.
4
+ * Qualify actual plugin toolchain authority before synchronous input proofs.
5
5
  * Cold Go/environment/SDK work stays off the host thread. A mismatch requests
6
6
  * one fresh native environment reading; observation failure remains unavailable
7
7
  * and the following admission or replay validator retains its failure policy. A
8
8
  * resident generation can reuse its exact proven source state while healthy
9
9
  * notifications and the still-qualified environment witness both hold. Native
10
- * environment preparation remains mandatory; source events cannot prove it.
10
+ * environment authority remains mandatory; source events cannot prove it.
11
+ *
12
+ * WARNING (#1712): yield before observing queued source changes, then qualify
13
+ * all current readings in one synchronous batch. Missing readings require an
14
+ * await and a fresh batch afterward. Source comparisons may request native
15
+ * refreshes; the caller must establish another current proof after those
16
+ * awaits. Never preserve a positive batch across an await or replay the SDK
17
+ * witness independently for every plugin and nested validator.
11
18
  *
12
19
  * @param cached Optional resident generation whose existing source-state and
13
20
  * environment witness may qualify source reuse. Other preparation owners
14
21
  * retain direct source comparison.
15
- * @evidence contracts/common.md#principled-implementation Every reported plugin directory prepares its actual current environment. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
22
+ * @evidence contracts/common.md#principled-implementation Every reported plugin directory qualifies current environment authority; only missing readings require asynchronous preparation. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
16
23
  * @evidence contracts/common.md#clear-and-simple-design One async boundary precedes existing synchronous generation, delivery and terminal proofs.
17
24
  * @evidence contracts/common.md#prohibited-implementation-shortcuts Missing observations stay unproved; reported binary state never substitutes for native environment preparation or source comparison.
18
25
  * @evidence contracts/common.md#meaningful-documentation Native prose identifies off-thread work, mismatch refresh and preserved downstream failure ownership.
19
26
  * @evidence contracts/portability.md#os-neutral-implementation The same native toolchain/environment reader and caller filesystem source digest qualify each directory without platform guesses.
20
- * @evidence contracts/performance.md#efficient-algorithms The envelope selector builds its directory map once per result, and preparation visits each reported directory once. Environment requests build keys from effective variables and qualify native dependencies. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
27
+ * @evidence contracts/performance.md#efficient-algorithms The envelope selector indexes directories once per result. Linear directory passes batch-qualify current readings, prepare missing authority, compare source state and refresh mismatches. Each synchronous batch hashes variables once and shares distinct native dependencies; any preparation await requires another current batch. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
21
28
  * @evidence contracts/performance.md#reuse-equivalent-work The environment owner shares equivalent in-flight requests and still-qualified readings. Resident source proof is reused only for the exact result and manifest digest, unchanged qualified environment and currently healthy covered source notifications; absent, dirty, replaced or unavailable witnesses retain direct proof. No epoch or quiet watcher alone authorizes reuse, and subsequent admission still owns its current validation.
22
29
  * @evidence contracts/performance.md#bound-retention-and-release-resources This module records asynchronous execution ownership in a WeakSet before preparation, including failures, so disposed results are not retained. Requests and worker lifetimes remain with the environment owner; this sequential operation awaits each request and acquires no native observer or independent cancellation handle.
23
30
  */
@@ -1,23 +1,30 @@
1
1
  import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTransform.mjs";
2
2
  import type { TtscTransformFilesystemOperations } from "../filesystem/TtscTransformFilesystemOperations.mjs";
3
3
  /**
4
- * Prepare actual plugin toolchain authority before synchronous input proofs.
4
+ * Qualify actual plugin toolchain authority before synchronous input proofs.
5
5
  * Cold Go/environment/SDK work stays off the host thread. A mismatch requests
6
6
  * one fresh native environment reading; observation failure remains unavailable
7
7
  * and the following admission or replay validator retains its failure policy. A
8
8
  * resident generation can reuse its exact proven source state while healthy
9
9
  * notifications and the still-qualified environment witness both hold. Native
10
- * environment preparation remains mandatory; source events cannot prove it.
10
+ * environment authority remains mandatory; source events cannot prove it.
11
+ *
12
+ * WARNING (#1712): yield before observing queued source changes, then qualify
13
+ * all current readings in one synchronous batch. Missing readings require an
14
+ * await and a fresh batch afterward. Source comparisons may request native
15
+ * refreshes; the caller must establish another current proof after those
16
+ * awaits. Never preserve a positive batch across an await or replay the SDK
17
+ * witness independently for every plugin and nested validator.
11
18
  *
12
19
  * @param cached Optional resident generation whose existing source-state and
13
20
  * environment witness may qualify source reuse. Other preparation owners
14
21
  * retain direct source comparison.
15
- * @evidence contracts/common.md#principled-implementation Every reported plugin directory prepares its actual current environment. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
22
+ * @evidence contracts/common.md#principled-implementation Every reported plugin directory qualifies current environment authority; only missing readings require asynchronous preparation. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
16
23
  * @evidence contracts/common.md#clear-and-simple-design One async boundary precedes existing synchronous generation, delivery and terminal proofs.
17
24
  * @evidence contracts/common.md#prohibited-implementation-shortcuts Missing observations stay unproved; reported binary state never substitutes for native environment preparation or source comparison.
18
25
  * @evidence contracts/common.md#meaningful-documentation Native prose identifies off-thread work, mismatch refresh and preserved downstream failure ownership.
19
26
  * @evidence contracts/portability.md#os-neutral-implementation The same native toolchain/environment reader and caller filesystem source digest qualify each directory without platform guesses.
20
- * @evidence contracts/performance.md#efficient-algorithms The envelope selector builds its directory map once per result, and preparation visits each reported directory once. Environment requests build keys from effective variables and qualify native dependencies. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
27
+ * @evidence contracts/performance.md#efficient-algorithms The envelope selector indexes directories once per result. Linear directory passes batch-qualify current readings, prepare missing authority, compare source state and refresh mismatches. Each synchronous batch hashes variables once and shares distinct native dependencies; any preparation await requires another current batch. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
21
28
  * @evidence contracts/performance.md#reuse-equivalent-work The environment owner shares equivalent in-flight requests and still-qualified readings. Resident source proof is reused only for the exact result and manifest digest, unchanged qualified environment and currently healthy covered source notifications; absent, dirty, replaced or unavailable witnesses retain direct proof. No epoch or quiet watcher alone authorizes reuse, and subsequent admission still owns its current validation.
22
29
  * @evidence contracts/performance.md#bound-retention-and-release-resources This module records asynchronous execution ownership in a WeakSet before preparation, including failures, so disposed results are not retained. Requests and worker lifetimes remain with the environment owner; this sequential operation awaits each request and acquires no native observer or independent cancellation handle.
23
30
  */
@@ -1,23 +1,30 @@
1
1
  import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTransform";
2
2
  import type { TtscTransformFilesystemOperations } from "../filesystem/TtscTransformFilesystemOperations";
3
3
  /**
4
- * Prepare actual plugin toolchain authority before synchronous input proofs.
4
+ * Qualify actual plugin toolchain authority before synchronous input proofs.
5
5
  * Cold Go/environment/SDK work stays off the host thread. A mismatch requests
6
6
  * one fresh native environment reading; observation failure remains unavailable
7
7
  * and the following admission or replay validator retains its failure policy. A
8
8
  * resident generation can reuse its exact proven source state while healthy
9
9
  * notifications and the still-qualified environment witness both hold. Native
10
- * environment preparation remains mandatory; source events cannot prove it.
10
+ * environment authority remains mandatory; source events cannot prove it.
11
+ *
12
+ * WARNING (#1712): yield before observing queued source changes, then qualify
13
+ * all current readings in one synchronous batch. Missing readings require an
14
+ * await and a fresh batch afterward. Source comparisons may request native
15
+ * refreshes; the caller must establish another current proof after those
16
+ * awaits. Never preserve a positive batch across an await or replay the SDK
17
+ * witness independently for every plugin and nested validator.
11
18
  *
12
19
  * @param cached Optional resident generation whose existing source-state and
13
20
  * environment witness may qualify source reuse. Other preparation owners
14
21
  * retain direct source comparison.
15
- * @evidence contracts/common.md#principled-implementation Every reported plugin directory prepares its actual current environment. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
22
+ * @evidence contracts/common.md#principled-implementation Every reported plugin directory qualifies current environment authority; only missing readings require asynchronous preparation. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
16
23
  * @evidence contracts/common.md#clear-and-simple-design One async boundary precedes existing synchronous generation, delivery and terminal proofs.
17
24
  * @evidence contracts/common.md#prohibited-implementation-shortcuts Missing observations stay unproved; reported binary state never substitutes for native environment preparation or source comparison.
18
25
  * @evidence contracts/common.md#meaningful-documentation Native prose identifies off-thread work, mismatch refresh and preserved downstream failure ownership.
19
26
  * @evidence contracts/portability.md#os-neutral-implementation The same native toolchain/environment reader and caller filesystem source digest qualify each directory without platform guesses.
20
- * @evidence contracts/performance.md#efficient-algorithms The envelope selector builds its directory map once per result, and preparation visits each reported directory once. Environment requests build keys from effective variables and qualify native dependencies. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
27
+ * @evidence contracts/performance.md#efficient-algorithms The envelope selector indexes directories once per result. Linear directory passes batch-qualify current readings, prepare missing authority, compare source state and refresh mismatches. Each synchronous batch hashes variables once and shares distinct native dependencies; any preparation await requires another current batch. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
21
28
  * @evidence contracts/performance.md#reuse-equivalent-work The environment owner shares equivalent in-flight requests and still-qualified readings. Resident source proof is reused only for the exact result and manifest digest, unchanged qualified environment and currently healthy covered source notifications; absent, dirty, replaced or unavailable witnesses retain direct proof. No epoch or quiet watcher alone authorizes reuse, and subsequent admission still owns its current validation.
22
29
  * @evidence contracts/performance.md#bound-retention-and-release-resources This module records asynchronous execution ownership in a WeakSet before preparation, including failures, so disposed results are not retained. Requests and worker lifetimes remain with the environment owner; this sequential operation awaits each request and acquires no native observer or independent cancellation handle.
23
30
  */
@@ -10,32 +10,61 @@ var pluginSourceHolds = require('./pluginSourceHolds.js');
10
10
  // async proofs cannot silently fall back to it after an unavailable reading.
11
11
  const asyncResults = new WeakSet();
12
12
  /**
13
- * Prepare actual plugin toolchain authority before synchronous input proofs.
13
+ * Qualify actual plugin toolchain authority before synchronous input proofs.
14
14
  * Cold Go/environment/SDK work stays off the host thread. A mismatch requests
15
15
  * one fresh native environment reading; observation failure remains unavailable
16
16
  * and the following admission or replay validator retains its failure policy. A
17
17
  * resident generation can reuse its exact proven source state while healthy
18
18
  * notifications and the still-qualified environment witness both hold. Native
19
- * environment preparation remains mandatory; source events cannot prove it.
19
+ * environment authority remains mandatory; source events cannot prove it.
20
+ *
21
+ * WARNING (#1712): yield before observing queued source changes, then qualify
22
+ * all current readings in one synchronous batch. Missing readings require an
23
+ * await and a fresh batch afterward. Source comparisons may request native
24
+ * refreshes; the caller must establish another current proof after those
25
+ * awaits. Never preserve a positive batch across an await or replay the SDK
26
+ * witness independently for every plugin and nested validator.
20
27
  *
21
28
  * @param cached Optional resident generation whose existing source-state and
22
29
  * environment witness may qualify source reuse. Other preparation owners
23
30
  * retain direct source comparison.
24
- * @evidence contracts/common.md#principled-implementation Every reported plugin directory prepares its actual current environment. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
31
+ * @evidence contracts/common.md#principled-implementation Every reported plugin directory qualifies current environment authority; only missing readings require asynchronous preparation. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
25
32
  * @evidence contracts/common.md#clear-and-simple-design One async boundary precedes existing synchronous generation, delivery and terminal proofs.
26
33
  * @evidence contracts/common.md#prohibited-implementation-shortcuts Missing observations stay unproved; reported binary state never substitutes for native environment preparation or source comparison.
27
34
  * @evidence contracts/common.md#meaningful-documentation Native prose identifies off-thread work, mismatch refresh and preserved downstream failure ownership.
28
35
  * @evidence contracts/portability.md#os-neutral-implementation The same native toolchain/environment reader and caller filesystem source digest qualify each directory without platform guesses.
29
- * @evidence contracts/performance.md#efficient-algorithms The envelope selector builds its directory map once per result, and preparation visits each reported directory once. Environment requests build keys from effective variables and qualify native dependencies. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
36
+ * @evidence contracts/performance.md#efficient-algorithms The envelope selector indexes directories once per result. Linear directory passes batch-qualify current readings, prepare missing authority, compare source state and refresh mismatches. Each synchronous batch hashes variables once and shares distinct native dependencies; any preparation await requires another current batch. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
30
37
  * @evidence contracts/performance.md#reuse-equivalent-work The environment owner shares equivalent in-flight requests and still-qualified readings. Resident source proof is reused only for the exact result and manifest digest, unchanged qualified environment and currently healthy covered source notifications; absent, dirty, replaced or unavailable witnesses retain direct proof. No epoch or quiet watcher alone authorizes reuse, and subsequent admission still owns its current validation.
31
38
  * @evidence contracts/performance.md#bound-retention-and-release-resources This module records asynchronous execution ownership in a WeakSet before preparation, including failures, so disposed results are not retained. Requests and worker lifetimes remain with the environment owner; this sequential operation awaits each request and acquires no native observer or independent cancellation handle.
32
39
  */
33
40
  async function preparePluginBuildEnvironments(result, filesystem, cached) {
34
41
  asyncResults.add(result);
35
- for (const [directory, state] of selectPluginSourceInputs.selectPluginSourceInputs(result)) {
42
+ const sources = selectPluginSourceInputs.selectPluginSourceInputs(result);
43
+ // Preserve the async preparation boundary even for warm environments.
44
+ // Events queued by the caller before awaiting preparation must participate
45
+ // in the source witness below. Observe the batch after this yield, never
46
+ // carry a positive environment observation across it (#1712).
47
+ await Promise.resolve();
48
+ const current = pluginSource.PluginBuildEnvironmentReadings.cachedAll(sources.keys());
49
+ let awaited = false;
50
+ for (const directory of sources.keys()) {
51
+ if (current.get(directory) !== undefined)
52
+ continue;
53
+ awaited = true;
36
54
  try {
37
55
  await pluginSource.PluginBuildEnvironmentReadings.prepare(directory);
38
- const environment = pluginSource.PluginBuildEnvironmentReadings.cached(directory);
56
+ }
57
+ catch {
58
+ // Keep unavailable authority for admission rather than cold fallback.
59
+ }
60
+ }
61
+ const environments = awaited
62
+ ? pluginSource.PluginBuildEnvironmentReadings.cachedAll(sources.keys())
63
+ : current;
64
+ const refresh = [];
65
+ for (const [directory, state] of sources) {
66
+ try {
67
+ const environment = environments.get(directory);
39
68
  if (cached?.result === result &&
40
69
  cached.hostInputValidation?.trees.get(directory) === state &&
41
70
  environment !== undefined &&
@@ -46,13 +75,21 @@ async function preparePluginBuildEnvironments(result, filesystem, cached) {
46
75
  if (!pluginSourceHolds.pluginSourceHolds(directory, state, filesystem, {
47
76
  environment,
48
77
  }))
49
- await pluginSource.PluginBuildEnvironmentReadings.prepare(directory, true);
78
+ refresh.push(directory);
50
79
  }
51
80
  catch {
52
81
  // Admission and terminal recovery interpret unavailable proof in their
53
82
  // own domain; this boundary never upgrades it to a successful reading.
54
83
  }
55
84
  }
85
+ for (const directory of refresh) {
86
+ try {
87
+ await pluginSource.PluginBuildEnvironmentReadings.prepare(directory, true);
88
+ }
89
+ catch {
90
+ // Synchronous admission requalifies after this asynchronous window.
91
+ }
92
+ }
56
93
  }
57
94
  /**
58
95
  * Whether this result's owner attempted asynchronous native preparation. This
@@ -1 +1 @@
1
- {"version":3,"file":"preparePluginBuildEnvironments.js","sources":["../../../../src/core/transform/inputs/preparePluginBuildEnvironments.ts"],"sourcesContent":[null],"names":["selectPluginSourceInputs","PluginBuildEnvironmentReadings","trackerProvesInputUnchanged","pluginSourceHolds"],"mappings":";;;;;;;AAQA;AACA;AACA;AACA,MAAM,YAAY,GAAG,IAAI,OAAO,EAAU;AAE1C;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,eAAe,8BAA8B,CAClD,MAA4C,EAC5C,UAA6C,EAC7C,MAAmC,EAAA;AAEnC,IAAA,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACxB,IAAA,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAIA,iDAAwB,CAAC,MAAM,CAAC,EAAE;AACjE,QAAA,IAAI;AACF,YAAA,MAAMC,2CAA8B,CAAC,OAAO,CAAC,SAAS,CAAC;YACvD,MAAM,WAAW,GAAGA,2CAA8B,CAAC,MAAM,CAAC,SAAS,CAAC;AACpE,YAAA,IACE,MAAM,EAAE,MAAM,KAAK,MAAM;gBACzB,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK;AAC1D,gBAAA,WAAW,KAAK,SAAS;gBACzB,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,CAAC;oBACzD,WAAW;AACb,gBAAAC,uDAA2B,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC;gBAEvE;YACF,IACE,CAACC,mCAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC/C,WAAW;aACZ,CAAC;gBAEF,MAAMF,2CAA8B,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;QACjE;AAAE,QAAA,MAAM;;;QAGR;IACF;AACF;AAEA;;;;;;;;;;;;AAYG;AACG,SAAU,mCAAmC,CACjD,MAA4C,EAAA;AAE5C,IAAA,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC;;;;;"}
1
+ {"version":3,"file":"preparePluginBuildEnvironments.js","sources":["../../../../src/core/transform/inputs/preparePluginBuildEnvironments.ts"],"sourcesContent":[null],"names":["selectPluginSourceInputs","PluginBuildEnvironmentReadings","trackerProvesInputUnchanged","pluginSourceHolds"],"mappings":";;;;;;;AAQA;AACA;AACA;AACA,MAAM,YAAY,GAAG,IAAI,OAAO,EAAU;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AACI,eAAe,8BAA8B,CAClD,MAA4C,EAC5C,UAA6C,EAC7C,MAAmC,EAAA;AAEnC,IAAA,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACxB,IAAA,MAAM,OAAO,GAAGA,iDAAwB,CAAC,MAAM,CAAC;;;;;AAKhD,IAAA,MAAM,OAAO,CAAC,OAAO,EAAE;IACvB,MAAM,OAAO,GAAGC,2CAA8B,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACxE,IAAI,OAAO,GAAG,KAAK;IACnB,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;AACtC,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE;QAC1C,OAAO,GAAG,IAAI;AACd,QAAA,IAAI;AACF,YAAA,MAAMA,2CAA8B,CAAC,OAAO,CAAC,SAAS,CAAC;QACzD;AAAE,QAAA,MAAM;;QAER;IACF;IACA,MAAM,YAAY,GAAG;UACjBA,2CAA8B,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;UACvD,OAAO;IACX,MAAM,OAAO,GAAa,EAAE;IAC5B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE;AACxC,QAAA,IAAI;YACF,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/C,YAAA,IACE,MAAM,EAAE,MAAM,KAAK,MAAM;gBACzB,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK;AAC1D,gBAAA,WAAW,KAAK,SAAS;gBACzB,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,CAAC;oBACzD,WAAW;AACb,gBAAAC,uDAA2B,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC;gBAEvE;YACF,IACE,CAACC,mCAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC/C,WAAW;aACZ,CAAC;AAEF,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3B;AAAE,QAAA,MAAM;;;QAGR;IACF;AACA,IAAA,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE;AAC/B,QAAA,IAAI;YACF,MAAMF,2CAA8B,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;QAC/D;AAAE,QAAA,MAAM;;QAER;IACF;AACF;AAEA;;;;;;;;;;;;AAYG;AACG,SAAU,mCAAmC,CACjD,MAA4C,EAAA;AAE5C,IAAA,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC;;;;;"}
@@ -8,32 +8,61 @@ import { pluginSourceHolds } from './pluginSourceHolds.mjs';
8
8
  // async proofs cannot silently fall back to it after an unavailable reading.
9
9
  const asyncResults = new WeakSet();
10
10
  /**
11
- * Prepare actual plugin toolchain authority before synchronous input proofs.
11
+ * Qualify actual plugin toolchain authority before synchronous input proofs.
12
12
  * Cold Go/environment/SDK work stays off the host thread. A mismatch requests
13
13
  * one fresh native environment reading; observation failure remains unavailable
14
14
  * and the following admission or replay validator retains its failure policy. A
15
15
  * resident generation can reuse its exact proven source state while healthy
16
16
  * notifications and the still-qualified environment witness both hold. Native
17
- * environment preparation remains mandatory; source events cannot prove it.
17
+ * environment authority remains mandatory; source events cannot prove it.
18
+ *
19
+ * WARNING (#1712): yield before observing queued source changes, then qualify
20
+ * all current readings in one synchronous batch. Missing readings require an
21
+ * await and a fresh batch afterward. Source comparisons may request native
22
+ * refreshes; the caller must establish another current proof after those
23
+ * awaits. Never preserve a positive batch across an await or replay the SDK
24
+ * witness independently for every plugin and nested validator.
18
25
  *
19
26
  * @param cached Optional resident generation whose existing source-state and
20
27
  * environment witness may qualify source reuse. Other preparation owners
21
28
  * retain direct source comparison.
22
- * @evidence contracts/common.md#principled-implementation Every reported plugin directory prepares its actual current environment. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
29
+ * @evidence contracts/common.md#principled-implementation Every reported plugin directory qualifies current environment authority; only missing readings require asynchronous preparation. The same result's matching manifest state can share source proof only with a healthy exact-source tracker and the environment under which that tree was proven. Otherwise this operation compares source state once and a mismatch refreshes environment authority for the following owning validator to compare again; failed preparation cannot qualify an input.
23
30
  * @evidence contracts/common.md#clear-and-simple-design One async boundary precedes existing synchronous generation, delivery and terminal proofs.
24
31
  * @evidence contracts/common.md#prohibited-implementation-shortcuts Missing observations stay unproved; reported binary state never substitutes for native environment preparation or source comparison.
25
32
  * @evidence contracts/common.md#meaningful-documentation Native prose identifies off-thread work, mismatch refresh and preserved downstream failure ownership.
26
33
  * @evidence contracts/portability.md#os-neutral-implementation The same native toolchain/environment reader and caller filesystem source digest qualify each directory without platform guesses.
27
- * @evidence contracts/performance.md#efficient-algorithms The envelope selector builds its directory map once per result, and preparation visits each reported directory once. Environment requests build keys from effective variables and qualify native dependencies. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
34
+ * @evidence contracts/performance.md#efficient-algorithms The envelope selector indexes directories once per result. Linear directory passes batch-qualify current readings, prepare missing authority, compare source state and refresh mismatches. Each synchronous batch hashes variables once and shares distinct native dependencies; any preparation await requires another current batch. A qualified source witness avoids enumeration; other source comparisons enumerate and sort files, check metadata and hash bytes when the digest cannot be reused. A mismatch requests one environment refresh rather than a second source comparison here.
28
35
  * @evidence contracts/performance.md#reuse-equivalent-work The environment owner shares equivalent in-flight requests and still-qualified readings. Resident source proof is reused only for the exact result and manifest digest, unchanged qualified environment and currently healthy covered source notifications; absent, dirty, replaced or unavailable witnesses retain direct proof. No epoch or quiet watcher alone authorizes reuse, and subsequent admission still owns its current validation.
29
36
  * @evidence contracts/performance.md#bound-retention-and-release-resources This module records asynchronous execution ownership in a WeakSet before preparation, including failures, so disposed results are not retained. Requests and worker lifetimes remain with the environment owner; this sequential operation awaits each request and acquires no native observer or independent cancellation handle.
30
37
  */
31
38
  async function preparePluginBuildEnvironments(result, filesystem, cached) {
32
39
  asyncResults.add(result);
33
- for (const [directory, state] of selectPluginSourceInputs(result)) {
40
+ const sources = selectPluginSourceInputs(result);
41
+ // Preserve the async preparation boundary even for warm environments.
42
+ // Events queued by the caller before awaiting preparation must participate
43
+ // in the source witness below. Observe the batch after this yield, never
44
+ // carry a positive environment observation across it (#1712).
45
+ await Promise.resolve();
46
+ const current = PluginBuildEnvironmentReadings.cachedAll(sources.keys());
47
+ let awaited = false;
48
+ for (const directory of sources.keys()) {
49
+ if (current.get(directory) !== undefined)
50
+ continue;
51
+ awaited = true;
34
52
  try {
35
53
  await PluginBuildEnvironmentReadings.prepare(directory);
36
- const environment = PluginBuildEnvironmentReadings.cached(directory);
54
+ }
55
+ catch {
56
+ // Keep unavailable authority for admission rather than cold fallback.
57
+ }
58
+ }
59
+ const environments = awaited
60
+ ? PluginBuildEnvironmentReadings.cachedAll(sources.keys())
61
+ : current;
62
+ const refresh = [];
63
+ for (const [directory, state] of sources) {
64
+ try {
65
+ const environment = environments.get(directory);
37
66
  if (cached?.result === result &&
38
67
  cached.hostInputValidation?.trees.get(directory) === state &&
39
68
  environment !== undefined &&
@@ -44,13 +73,21 @@ async function preparePluginBuildEnvironments(result, filesystem, cached) {
44
73
  if (!pluginSourceHolds(directory, state, filesystem, {
45
74
  environment,
46
75
  }))
47
- await PluginBuildEnvironmentReadings.prepare(directory, true);
76
+ refresh.push(directory);
48
77
  }
49
78
  catch {
50
79
  // Admission and terminal recovery interpret unavailable proof in their
51
80
  // own domain; this boundary never upgrades it to a successful reading.
52
81
  }
53
82
  }
83
+ for (const directory of refresh) {
84
+ try {
85
+ await PluginBuildEnvironmentReadings.prepare(directory, true);
86
+ }
87
+ catch {
88
+ // Synchronous admission requalifies after this asynchronous window.
89
+ }
90
+ }
54
91
  }
55
92
  /**
56
93
  * Whether this result's owner attempted asynchronous native preparation. This
@@ -1 +1 @@
1
- {"version":3,"file":"preparePluginBuildEnvironments.mjs","sources":["../../../../src/core/transform/inputs/preparePluginBuildEnvironments.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAQA;AACA;AACA;AACA,MAAM,YAAY,GAAG,IAAI,OAAO,EAAU;AAE1C;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,eAAe,8BAA8B,CAClD,MAA4C,EAC5C,UAA6C,EAC7C,MAAmC,EAAA;AAEnC,IAAA,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACxB,IAAA,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,wBAAwB,CAAC,MAAM,CAAC,EAAE;AACjE,QAAA,IAAI;AACF,YAAA,MAAM,8BAA8B,CAAC,OAAO,CAAC,SAAS,CAAC;YACvD,MAAM,WAAW,GAAG,8BAA8B,CAAC,MAAM,CAAC,SAAS,CAAC;AACpE,YAAA,IACE,MAAM,EAAE,MAAM,KAAK,MAAM;gBACzB,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK;AAC1D,gBAAA,WAAW,KAAK,SAAS;gBACzB,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,CAAC;oBACzD,WAAW;AACb,gBAAA,2BAA2B,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC;gBAEvE;YACF,IACE,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC/C,WAAW;aACZ,CAAC;gBAEF,MAAM,8BAA8B,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;QACjE;AAAE,QAAA,MAAM;;;QAGR;IACF;AACF;AAEA;;;;;;;;;;;;AAYG;AACG,SAAU,mCAAmC,CACjD,MAA4C,EAAA;AAE5C,IAAA,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC;;;;"}
1
+ {"version":3,"file":"preparePluginBuildEnvironments.mjs","sources":["../../../../src/core/transform/inputs/preparePluginBuildEnvironments.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAQA;AACA;AACA;AACA,MAAM,YAAY,GAAG,IAAI,OAAO,EAAU;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AACI,eAAe,8BAA8B,CAClD,MAA4C,EAC5C,UAA6C,EAC7C,MAAmC,EAAA;AAEnC,IAAA,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACxB,IAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC;;;;;AAKhD,IAAA,MAAM,OAAO,CAAC,OAAO,EAAE;IACvB,MAAM,OAAO,GAAG,8BAA8B,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACxE,IAAI,OAAO,GAAG,KAAK;IACnB,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;AACtC,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE;QAC1C,OAAO,GAAG,IAAI;AACd,QAAA,IAAI;AACF,YAAA,MAAM,8BAA8B,CAAC,OAAO,CAAC,SAAS,CAAC;QACzD;AAAE,QAAA,MAAM;;QAER;IACF;IACA,MAAM,YAAY,GAAG;UACjB,8BAA8B,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;UACvD,OAAO;IACX,MAAM,OAAO,GAAa,EAAE;IAC5B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE;AACxC,QAAA,IAAI;YACF,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/C,YAAA,IACE,MAAM,EAAE,MAAM,KAAK,MAAM;gBACzB,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK;AAC1D,gBAAA,WAAW,KAAK,SAAS;gBACzB,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,GAAG,CAAC,SAAS,CAAC;oBACzD,WAAW;AACb,gBAAA,2BAA2B,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC;gBAEvE;YACF,IACE,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC/C,WAAW;aACZ,CAAC;AAEF,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3B;AAAE,QAAA,MAAM;;;QAGR;IACF;AACA,IAAA,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE;AAC/B,QAAA,IAAI;YACF,MAAM,8BAA8B,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;QAC/D;AAAE,QAAA,MAAM;;QAER;IACF;AACF;AAEA;;;;;;;;;;;;AAYG;AACG,SAAU,mCAAmC,CACjD,MAA4C,EAAA;AAE5C,IAAA,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC;;;;"}
@@ -4,10 +4,11 @@ import type { WatchBrokerRegistration } from "./WatchBrokerRegistration.cjs";
4
4
  * The live state of the isolated watch process.
5
5
  *
6
6
  * The broker multiplexes every Windows and macOS watch of the process over one
7
- * IPC channel, a tracker's and an input observer's scope's alike. Registrations
8
- * and drains are counted so the channel is referenced only while a reply is
9
- * outstanding, and each registration keeps the sink its messages go to and the
10
- * spelling map that translates the child's canonical paths back to its own.
7
+ * ordered transport, a tracker's and an input observer's scope's alike. Windows
8
+ * uses the native helper's stdio; macOS uses Node IPC. Registrations and drains
9
+ * are counted so the channel is referenced only while a reply is outstanding,
10
+ * and each registration keeps the sink its messages go to and the spelling map
11
+ * that translates the child's canonical paths back to its own.
11
12
  *
12
13
  * @evidence contracts/common.md#principled-implementation
13
14
  * Registration and request ids distinguish multiplexed owners; drain scopes
@@ -35,6 +36,15 @@ import type { WatchBrokerRegistration } from "./WatchBrokerRegistration.cjs";
35
36
  export interface WatchBroker {
36
37
  /** The isolated watch process; unreferenced whenever no reply is outstanding. */
37
38
  child: ChildProcess;
39
+ /**
40
+ * Native stdio transport on Windows; absent for the macOS IPC broker and
41
+ * explicit test transports.
42
+ */
43
+ transport?: {
44
+ send(message: unknown): boolean;
45
+ reference(active: boolean): void;
46
+ close(): void;
47
+ };
38
48
  /**
39
49
  * Round-trips awaiting the child's reply, by request id, each released with
40
50
  * whether the child answered it.
@@ -4,10 +4,11 @@ import type { WatchBrokerRegistration } from "./WatchBrokerRegistration.mjs";
4
4
  * The live state of the isolated watch process.
5
5
  *
6
6
  * The broker multiplexes every Windows and macOS watch of the process over one
7
- * IPC channel, a tracker's and an input observer's scope's alike. Registrations
8
- * and drains are counted so the channel is referenced only while a reply is
9
- * outstanding, and each registration keeps the sink its messages go to and the
10
- * spelling map that translates the child's canonical paths back to its own.
7
+ * ordered transport, a tracker's and an input observer's scope's alike. Windows
8
+ * uses the native helper's stdio; macOS uses Node IPC. Registrations and drains
9
+ * are counted so the channel is referenced only while a reply is outstanding,
10
+ * and each registration keeps the sink its messages go to and the spelling map
11
+ * that translates the child's canonical paths back to its own.
11
12
  *
12
13
  * @evidence contracts/common.md#principled-implementation
13
14
  * Registration and request ids distinguish multiplexed owners; drain scopes
@@ -35,6 +36,15 @@ import type { WatchBrokerRegistration } from "./WatchBrokerRegistration.mjs";
35
36
  export interface WatchBroker {
36
37
  /** The isolated watch process; unreferenced whenever no reply is outstanding. */
37
38
  child: ChildProcess;
39
+ /**
40
+ * Native stdio transport on Windows; absent for the macOS IPC broker and
41
+ * explicit test transports.
42
+ */
43
+ transport?: {
44
+ send(message: unknown): boolean;
45
+ reference(active: boolean): void;
46
+ close(): void;
47
+ };
38
48
  /**
39
49
  * Round-trips awaiting the child's reply, by request id, each released with
40
50
  * whether the child answered it.
@@ -4,10 +4,11 @@ import type { WatchBrokerRegistration } from "./WatchBrokerRegistration";
4
4
  * The live state of the isolated watch process.
5
5
  *
6
6
  * The broker multiplexes every Windows and macOS watch of the process over one
7
- * IPC channel, a tracker's and an input observer's scope's alike. Registrations
8
- * and drains are counted so the channel is referenced only while a reply is
9
- * outstanding, and each registration keeps the sink its messages go to and the
10
- * spelling map that translates the child's canonical paths back to its own.
7
+ * ordered transport, a tracker's and an input observer's scope's alike. Windows
8
+ * uses the native helper's stdio; macOS uses Node IPC. Registrations and drains
9
+ * are counted so the channel is referenced only while a reply is outstanding,
10
+ * and each registration keeps the sink its messages go to and the spelling map
11
+ * that translates the child's canonical paths back to its own.
11
12
  *
12
13
  * @evidence contracts/common.md#principled-implementation
13
14
  * Registration and request ids distinguish multiplexed owners; drain scopes
@@ -35,6 +36,15 @@ import type { WatchBrokerRegistration } from "./WatchBrokerRegistration";
35
36
  export interface WatchBroker {
36
37
  /** The isolated watch process; unreferenced whenever no reply is outstanding. */
37
38
  child: ChildProcess;
39
+ /**
40
+ * Native stdio transport on Windows; absent for the macOS IPC broker and
41
+ * explicit test transports.
42
+ */
43
+ transport?: {
44
+ send(message: unknown): boolean;
45
+ reference(active: boolean): void;
46
+ close(): void;
47
+ };
38
48
  /**
39
49
  * Round-trips awaiting the child's reply, by request id, each released with
40
50
  * whether the child answered it.