@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.
- package/lib/core/bun/bun.d.cts +3 -2
- package/lib/core/bun/bun.d.mts +3 -2
- package/lib/core/bun/bun.d.ts +3 -2
- package/lib/core/bun/bun.js +8 -4
- package/lib/core/bun/bun.js.map +1 -1
- package/lib/core/bun/bun.mjs +8 -4
- package/lib/core/bun/bun.mjs.map +1 -1
- package/lib/core/observer/createInputObserver.js +6 -5
- package/lib/core/observer/createInputObserver.js.map +1 -1
- package/lib/core/observer/createInputObserver.mjs +6 -5
- package/lib/core/observer/createInputObserver.mjs.map +1 -1
- package/lib/core/observer/openIsolatedRecursiveWatch.d.cts +11 -12
- package/lib/core/observer/openIsolatedRecursiveWatch.d.mts +11 -12
- package/lib/core/observer/openIsolatedRecursiveWatch.d.ts +11 -12
- package/lib/core/observer/openIsolatedRecursiveWatch.js +11 -12
- package/lib/core/observer/openIsolatedRecursiveWatch.js.map +1 -1
- package/lib/core/observer/openIsolatedRecursiveWatch.mjs +11 -12
- package/lib/core/observer/openIsolatedRecursiveWatch.mjs.map +1 -1
- package/lib/core/transform/cache/TtscCachedProjectTransform.d.cts +12 -3
- package/lib/core/transform/cache/TtscCachedProjectTransform.d.mts +12 -3
- package/lib/core/transform/cache/TtscCachedProjectTransform.d.ts +12 -3
- package/lib/core/transform/cache/selectCachedGenerationAction.d.cts +2 -0
- package/lib/core/transform/cache/selectCachedGenerationAction.d.mts +2 -0
- package/lib/core/transform/cache/selectCachedGenerationAction.d.ts +2 -0
- package/lib/core/transform/cache/selectCachedGenerationAction.js +1 -1
- package/lib/core/transform/cache/selectCachedGenerationAction.js.map +1 -1
- package/lib/core/transform/cache/selectCachedGenerationAction.mjs +1 -1
- package/lib/core/transform/cache/selectCachedGenerationAction.mjs.map +1 -1
- package/lib/core/transform/deliverCachedTransform.d.cts +36 -0
- package/lib/core/transform/deliverCachedTransform.d.mts +36 -0
- package/lib/core/transform/deliverCachedTransform.d.ts +36 -0
- package/lib/core/transform/deliverCachedTransform.js +73 -0
- package/lib/core/transform/deliverCachedTransform.js.map +1 -0
- package/lib/core/transform/deliverCachedTransform.mjs +71 -0
- package/lib/core/transform/deliverCachedTransform.mjs.map +1 -0
- package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.d.cts +2 -2
- package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.d.mts +2 -2
- package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.d.ts +2 -2
- package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.js +6 -2
- package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.js.map +1 -1
- package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.mjs +6 -2
- package/lib/core/transform/envelope/selectDeclaredProjectInputKeys.mjs.map +1 -1
- package/lib/core/transform/envelope/selectExternalInputPaths.d.cts +3 -5
- package/lib/core/transform/envelope/selectExternalInputPaths.d.mts +3 -5
- package/lib/core/transform/envelope/selectExternalInputPaths.d.ts +3 -5
- package/lib/core/transform/envelope/selectExternalInputPaths.js +8 -7
- package/lib/core/transform/envelope/selectExternalInputPaths.js.map +1 -1
- package/lib/core/transform/envelope/selectExternalInputPaths.mjs +8 -7
- package/lib/core/transform/envelope/selectExternalInputPaths.mjs.map +1 -1
- package/lib/core/transform/filesystem/TtscTransformFilesystemOperations.d.cts +15 -12
- package/lib/core/transform/filesystem/TtscTransformFilesystemOperations.d.mts +15 -12
- package/lib/core/transform/filesystem/TtscTransformFilesystemOperations.d.ts +15 -12
- package/lib/core/transform/generation/selectTransformAttemptDisposition.d.cts +3 -1
- package/lib/core/transform/generation/selectTransformAttemptDisposition.d.mts +3 -1
- package/lib/core/transform/generation/selectTransformAttemptDisposition.d.ts +3 -1
- package/lib/core/transform/generation/selectTransformAttemptDisposition.js +3 -1
- package/lib/core/transform/generation/selectTransformAttemptDisposition.js.map +1 -1
- package/lib/core/transform/generation/selectTransformAttemptDisposition.mjs +3 -1
- package/lib/core/transform/generation/selectTransformAttemptDisposition.mjs.map +1 -1
- package/lib/core/transform/generation/transformProject.d.cts +9 -7
- package/lib/core/transform/generation/transformProject.d.mts +9 -7
- package/lib/core/transform/generation/transformProject.d.ts +9 -7
- package/lib/core/transform/generation/transformProject.js +14 -9
- package/lib/core/transform/generation/transformProject.js.map +1 -1
- package/lib/core/transform/generation/transformProject.mjs +14 -9
- package/lib/core/transform/generation/transformProject.mjs.map +1 -1
- package/lib/core/transform/inputs/preparePluginBuildEnvironments.d.cts +11 -4
- package/lib/core/transform/inputs/preparePluginBuildEnvironments.d.mts +11 -4
- package/lib/core/transform/inputs/preparePluginBuildEnvironments.d.ts +11 -4
- package/lib/core/transform/inputs/preparePluginBuildEnvironments.js +44 -7
- package/lib/core/transform/inputs/preparePluginBuildEnvironments.js.map +1 -1
- package/lib/core/transform/inputs/preparePluginBuildEnvironments.mjs +44 -7
- package/lib/core/transform/inputs/preparePluginBuildEnvironments.mjs.map +1 -1
- package/lib/core/transform/tracker/broker/WatchBroker.d.cts +14 -4
- package/lib/core/transform/tracker/broker/WatchBroker.d.mts +14 -4
- package/lib/core/transform/tracker/broker/WatchBroker.d.ts +14 -4
- package/lib/core/transform/tracker/broker/WatchBrokerTransport.d.cts +63 -0
- package/lib/core/transform/tracker/broker/WatchBrokerTransport.d.mts +63 -0
- package/lib/core/transform/tracker/broker/WatchBrokerTransport.d.ts +63 -0
- package/lib/core/transform/tracker/broker/WatchBrokerTransport.js +89 -0
- package/lib/core/transform/tracker/broker/WatchBrokerTransport.js.map +1 -0
- package/lib/core/transform/tracker/broker/WatchBrokerTransport.mjs +89 -0
- package/lib/core/transform/tracker/broker/WatchBrokerTransport.mjs.map +1 -0
- package/lib/core/transform/tracker/broker/drainWatchBroker.d.cts +8 -8
- package/lib/core/transform/tracker/broker/drainWatchBroker.d.mts +8 -8
- package/lib/core/transform/tracker/broker/drainWatchBroker.d.ts +8 -8
- package/lib/core/transform/tracker/broker/drainWatchBroker.js +12 -13
- package/lib/core/transform/tracker/broker/drainWatchBroker.js.map +1 -1
- package/lib/core/transform/tracker/broker/drainWatchBroker.mjs +12 -13
- package/lib/core/transform/tracker/broker/drainWatchBroker.mjs.map +1 -1
- package/lib/core/transform/tracker/broker/getWatchBroker.d.cts +18 -15
- package/lib/core/transform/tracker/broker/getWatchBroker.d.mts +18 -15
- package/lib/core/transform/tracker/broker/getWatchBroker.d.ts +18 -15
- package/lib/core/transform/tracker/broker/getWatchBroker.js +87 -17
- package/lib/core/transform/tracker/broker/getWatchBroker.js.map +1 -1
- package/lib/core/transform/tracker/broker/getWatchBroker.mjs +87 -17
- package/lib/core/transform/tracker/broker/getWatchBroker.mjs.map +1 -1
- package/lib/core/transform/tracker/broker/openBrokeredWatch.d.cts +5 -5
- package/lib/core/transform/tracker/broker/openBrokeredWatch.d.mts +5 -5
- package/lib/core/transform/tracker/broker/openBrokeredWatch.d.ts +5 -5
- package/lib/core/transform/tracker/broker/openBrokeredWatch.js +11 -14
- package/lib/core/transform/tracker/broker/openBrokeredWatch.js.map +1 -1
- package/lib/core/transform/tracker/broker/openBrokeredWatch.mjs +11 -14
- package/lib/core/transform/tracker/broker/openBrokeredWatch.mjs.map +1 -1
- package/lib/core/transform/tracker/broker/usesWatchBroker.d.cts +7 -7
- package/lib/core/transform/tracker/broker/usesWatchBroker.d.mts +7 -7
- package/lib/core/transform/tracker/broker/usesWatchBroker.d.ts +7 -7
- package/lib/core/transform/tracker/broker/usesWatchBroker.js +7 -7
- package/lib/core/transform/tracker/broker/usesWatchBroker.mjs +7 -7
- package/lib/core/transform/tracker/broker/watchBrokerSource.d.cts +9 -10
- package/lib/core/transform/tracker/broker/watchBrokerSource.d.mts +9 -10
- package/lib/core/transform/tracker/broker/watchBrokerSource.d.ts +9 -10
- package/lib/core/transform/tracker/broker/watchBrokerSource.js +10 -11
- package/lib/core/transform/tracker/broker/watchBrokerSource.js.map +1 -1
- package/lib/core/transform/tracker/broker/watchBrokerSource.mjs +10 -11
- package/lib/core/transform/tracker/broker/watchBrokerSource.mjs.map +1 -1
- package/lib/core/transform/transformTtsc.d.cts +7 -4
- package/lib/core/transform/transformTtsc.d.mts +7 -4
- package/lib/core/transform/transformTtsc.d.ts +7 -4
- package/lib/core/transform/transformTtsc.js +37 -92
- package/lib/core/transform/transformTtsc.js.map +1 -1
- package/lib/core/transform/transformTtsc.mjs +37 -92
- package/lib/core/transform/transformTtsc.mjs.map +1 -1
- package/lib/core/transform/validation/TtscGenerationProof.d.cts +105 -0
- package/lib/core/transform/validation/TtscGenerationProof.d.mts +105 -0
- package/lib/core/transform/validation/TtscGenerationProof.d.ts +105 -0
- package/lib/core/transform/validation/TtscGenerationProof.js +149 -0
- package/lib/core/transform/validation/TtscGenerationProof.js.map +1 -0
- package/lib/core/transform/validation/TtscGenerationProof.mjs +149 -0
- package/lib/core/transform/validation/TtscGenerationProof.mjs.map +1 -0
- package/lib/core/transform/validation/matchesCachedSource.d.cts +18 -15
- package/lib/core/transform/validation/matchesCachedSource.d.mts +18 -15
- package/lib/core/transform/validation/matchesCachedSource.d.ts +18 -15
- package/lib/core/transform/validation/matchesCachedSource.js +28 -22
- package/lib/core/transform/validation/matchesCachedSource.js.map +1 -1
- package/lib/core/transform/validation/matchesCachedSource.mjs +28 -22
- package/lib/core/transform/validation/matchesCachedSource.mjs.map +1 -1
- package/lib/core/transform/validation/matchesCompleteInputSnapshot.d.cts +3 -2
- package/lib/core/transform/validation/matchesCompleteInputSnapshot.d.mts +3 -2
- package/lib/core/transform/validation/matchesCompleteInputSnapshot.d.ts +3 -2
- package/lib/core/transform/validation/matchesCompleteInputSnapshot.js +4 -4
- package/lib/core/transform/validation/matchesCompleteInputSnapshot.js.map +1 -1
- package/lib/core/transform/validation/matchesCompleteInputSnapshot.mjs +4 -4
- package/lib/core/transform/validation/matchesCompleteInputSnapshot.mjs.map +1 -1
- package/lib/core/transform/validation/matchesNarrowPersistentInputs.d.cts +2 -1
- package/lib/core/transform/validation/matchesNarrowPersistentInputs.d.mts +2 -1
- package/lib/core/transform/validation/matchesNarrowPersistentInputs.d.ts +2 -1
- package/lib/core/transform/validation/matchesNarrowPersistentInputs.js +2 -2
- package/lib/core/transform/validation/matchesNarrowPersistentInputs.js.map +1 -1
- package/lib/core/transform/validation/matchesNarrowPersistentInputs.mjs +2 -2
- package/lib/core/transform/validation/matchesNarrowPersistentInputs.mjs.map +1 -1
- package/lib/core/transform/validation/matchesUniversalHostInputTrees.d.cts +3 -2
- package/lib/core/transform/validation/matchesUniversalHostInputTrees.d.mts +3 -2
- package/lib/core/transform/validation/matchesUniversalHostInputTrees.d.ts +3 -2
- package/lib/core/transform/validation/matchesUniversalHostInputTrees.js +5 -3
- package/lib/core/transform/validation/matchesUniversalHostInputTrees.js.map +1 -1
- package/lib/core/transform/validation/matchesUniversalHostInputTrees.mjs +5 -3
- package/lib/core/transform/validation/matchesUniversalHostInputTrees.mjs.map +1 -1
- package/lib/core/transform/validation/matchesUniversalHostInputs.d.cts +3 -2
- package/lib/core/transform/validation/matchesUniversalHostInputs.d.mts +3 -2
- package/lib/core/transform/validation/matchesUniversalHostInputs.d.ts +3 -2
- package/lib/core/transform/validation/matchesUniversalHostInputs.js +5 -5
- package/lib/core/transform/validation/matchesUniversalHostInputs.js.map +1 -1
- package/lib/core/transform/validation/matchesUniversalHostInputs.mjs +5 -5
- package/lib/core/transform/validation/matchesUniversalHostInputs.mjs.map +1 -1
- package/lib/core/transform/validation/nativeInputPredicatesHold.d.cts +5 -4
- package/lib/core/transform/validation/nativeInputPredicatesHold.d.mts +5 -4
- package/lib/core/transform/validation/nativeInputPredicatesHold.d.ts +5 -4
- package/lib/core/transform/validation/nativeInputPredicatesHold.js +31 -12
- package/lib/core/transform/validation/nativeInputPredicatesHold.js.map +1 -1
- package/lib/core/transform/validation/nativeInputPredicatesHold.mjs +31 -12
- package/lib/core/transform/validation/nativeInputPredicatesHold.mjs.map +1 -1
- package/lib/core/transform/validation/notificationsProveProgramUnchanged.d.cts +2 -1
- package/lib/core/transform/validation/notificationsProveProgramUnchanged.d.mts +2 -1
- package/lib/core/transform/validation/notificationsProveProgramUnchanged.d.ts +2 -1
- package/lib/core/transform/validation/notificationsProveProgramUnchanged.js +2 -2
- package/lib/core/transform/validation/notificationsProveProgramUnchanged.js.map +1 -1
- package/lib/core/transform/validation/notificationsProveProgramUnchanged.mjs +2 -2
- package/lib/core/transform/validation/notificationsProveProgramUnchanged.mjs.map +1 -1
- package/lib/core/transform/watch/notifyWatchInputs.js +3 -0
- package/lib/core/transform/watch/notifyWatchInputs.js.map +1 -1
- package/lib/core/transform/watch/notifyWatchInputs.mjs +3 -0
- package/lib/core/transform/watch/notifyWatchInputs.mjs.map +1 -1
- package/lib/core/turbopack/turbopack.js +2 -1
- package/lib/core/turbopack/turbopack.js.map +1 -1
- package/lib/core/turbopack/turbopack.mjs +2 -1
- package/lib/core/turbopack/turbopack.mjs.map +1 -1
- package/package.json +3 -3
- package/src/core/bun/bun.ts +8 -4
- package/src/core/observer/createInputObserver.ts +6 -5
- package/src/core/observer/openIsolatedRecursiveWatch.ts +11 -12
- package/src/core/transform/cache/TtscCachedProjectTransform.ts +13 -3
- package/src/core/transform/cache/selectCachedGenerationAction.ts +9 -1
- package/src/core/transform/deliverCachedTransform.ts +97 -0
- package/src/core/transform/envelope/selectDeclaredProjectInputKeys.ts +5 -2
- package/src/core/transform/envelope/selectExternalInputPaths.ts +7 -7
- package/src/core/transform/filesystem/TtscTransformFilesystemOperations.ts +15 -12
- package/src/core/transform/generation/selectTransformAttemptDisposition.ts +3 -1
- package/src/core/transform/generation/transformProject.ts +13 -9
- package/src/core/transform/inputs/preparePluginBuildEnvironments.ts +41 -7
- package/src/core/transform/tracker/broker/WatchBroker.ts +15 -4
- package/src/core/transform/tracker/broker/WatchBrokerTransport.ts +82 -0
- package/src/core/transform/tracker/broker/drainWatchBroker.ts +12 -13
- package/src/core/transform/tracker/broker/getWatchBroker.ts +89 -18
- package/src/core/transform/tracker/broker/openBrokeredWatch.ts +11 -14
- package/src/core/transform/tracker/broker/usesWatchBroker.ts +7 -7
- package/src/core/transform/tracker/broker/watchBrokerSource.ts +10 -11
- package/src/core/transform/transformTtsc.ts +36 -92
- package/src/core/transform/validation/TtscGenerationProof.ts +201 -0
- package/src/core/transform/validation/matchesCachedSource.ts +27 -21
- package/src/core/transform/validation/matchesCompleteInputSnapshot.ts +5 -3
- package/src/core/transform/validation/matchesNarrowPersistentInputs.ts +3 -1
- package/src/core/transform/validation/matchesUniversalHostInputTrees.ts +6 -2
- package/src/core/transform/validation/matchesUniversalHostInputs.ts +6 -4
- package/src/core/transform/validation/nativeInputPredicatesHold.ts +36 -14
- package/src/core/transform/validation/notificationsProveProgramUnchanged.ts +3 -1
- package/src/core/transform/watch/notifyWatchInputs.ts +3 -0
- package/src/core/turbopack/turbopack.ts +2 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { PluginBuildEnvironmentReadings } from 'ttsc/plugin-source';
|
|
2
|
+
import { disposeCachedTransform } from '../cache/disposeCachedTransform.mjs';
|
|
3
|
+
import { evictGeneration } from '../cache/evictGeneration.mjs';
|
|
4
|
+
import { resultFilesystem } from '../cache/resultFilesystem.mjs';
|
|
5
|
+
import { envelopeDerivation } from '../envelope/envelopeDerivation.mjs';
|
|
6
|
+
import { selectPluginSourceInputs } from '../envelope/selectPluginSourceInputs.mjs';
|
|
7
|
+
import { pathIdentityKey } from '../filesystem/pathIdentityKey.mjs';
|
|
8
|
+
import { preparePluginBuildEnvironments } from '../inputs/preparePluginBuildEnvironments.mjs';
|
|
9
|
+
import { toProjectKey } from '../project/toProjectKey.mjs';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* The shared ownership boundary for generation reuse in every adapter.
|
|
13
|
+
*
|
|
14
|
+
* WARNING (#1712, #1713): a module, a synchronous input-proof transaction, a
|
|
15
|
+
* delivery pass, and a persistent generation have different lifetimes. Keep
|
|
16
|
+
* those distinctions here. Do not add native preparation before every module,
|
|
17
|
+
* keep positive toolchain checks for a whole process, or make Bun's adapter
|
|
18
|
+
* invent its own cache policy. A proven pass shares its first deliveries;
|
|
19
|
+
* persistent/repeated deliveries require new current observations. Incomplete
|
|
20
|
+
* observations can share a coherent local result only inside an explicitly
|
|
21
|
+
* nonwatching pass with actual host-cache withdrawal, never a record or pool.
|
|
22
|
+
*
|
|
23
|
+
* @evidence contracts/common.md#principled-implementation Explicit pass identity, source baseline and first-delivery membership delimit sharing; synchronous transactions independently qualify current native inputs and incomplete local outputs retain stricter lifecycle admission.
|
|
24
|
+
* @evidence contracts/common.md#clear-and-simple-design One core owner supplies the same preparation, pass and fresh-only policies to every adapter instead of separate host-specific caches.
|
|
25
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts Missing observation never becomes complete snapshot authority; watching, persistent, repeated and unknown boundaries cannot borrow an incomplete pass result.
|
|
26
|
+
* @evidence contracts/common.md#meaningful-documentation Native context names the four lifetimes and warns against the specific performance and stale-cache regressions they prevent.
|
|
27
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation Members delegate native observations to the generation's filesystem and the native environment owner.
|
|
28
|
+
* @evidenceExclude contracts/performance.md#efficient-algorithms Members own baseline lookup, batch qualification and admission.
|
|
29
|
+
* @evidenceExclude contracts/performance.md#reuse-equivalent-work Members establish the distinct sharing boundaries.
|
|
30
|
+
* @evidenceExclude contracts/performance.md#bound-retention-and-release-resources The namespace owns no registry; transactions and generations have explicit callers.
|
|
31
|
+
*/
|
|
32
|
+
var TtscGenerationProof;
|
|
33
|
+
(function (TtscGenerationProof) {
|
|
34
|
+
/**
|
|
35
|
+
* Prepare native authority only when this delivery needs a new input proof.
|
|
36
|
+
* The caller must create its synchronous transaction after awaiting this.
|
|
37
|
+
*
|
|
38
|
+
* @evidence contracts/common.md#principled-implementation A qualified first-delivery pass already owns environment proof; all other requests prepare actual authority before synchronous admission.
|
|
39
|
+
* @evidence contracts/common.md#clear-and-simple-design One branch delegates native preparation rather than repeating it in adapters.
|
|
40
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts Only the existing explicit pass contract permits skipping preparation; no watcher silence or process lifetime substitutes for it.
|
|
41
|
+
* @evidence contracts/common.md#meaningful-documentation Prose states preparation versus transaction ordering.
|
|
42
|
+
* @evidence contracts/portability.md#os-neutral-implementation Preparation uses the actual generation filesystem and native toolchain reader.
|
|
43
|
+
* @evidence contracts/performance.md#efficient-algorithms Qualified first deliveries perform baseline/identity lookups; other deliveries delegate one preparation per unique plugin directory.
|
|
44
|
+
* @evidence contracts/performance.md#reuse-equivalent-work The pass shares its existing first-delivery proof; persistent and repeated deliveries establish new native authority.
|
|
45
|
+
* @evidenceExclude contracts/performance.md#bound-retention-and-release-resources Native requests belong to their environment owner; no transaction survives this await.
|
|
46
|
+
*/
|
|
47
|
+
async function prepare(cached, file, epoch) {
|
|
48
|
+
if (!sharesPass(cached, file, epoch))
|
|
49
|
+
await preparePluginBuildEnvironments(cached.result, resultFilesystem(cached.result), cached);
|
|
50
|
+
}
|
|
51
|
+
TtscGenerationProof.prepare = prepare;
|
|
52
|
+
/**
|
|
53
|
+
* Start fresh synchronous observation after notification and preparation
|
|
54
|
+
* awaits, sharing actual SDK queries and native predicate replay locally.
|
|
55
|
+
*
|
|
56
|
+
* @evidence contracts/common.md#principled-implementation Current environments are batch-qualified after asynchronous work; a qualified pass needs no redundant native environment observation.
|
|
57
|
+
* @evidence contracts/common.md#clear-and-simple-design One constructor binds observations to their exact generation.
|
|
58
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts No current verdict is retained across deliveries or asynchronous boundaries.
|
|
59
|
+
* @evidence contracts/common.md#meaningful-documentation Native prose identifies the mandatory ordering and synchronous lifetime.
|
|
60
|
+
* @evidence contracts/portability.md#os-neutral-implementation Native observation remains with the environment witness owner and actual generation path identity.
|
|
61
|
+
* @evidence contracts/performance.md#efficient-algorithms Plugin selection is generation-indexed; one batch shares variable hashing and distinct SDK metadata queries.
|
|
62
|
+
* @evidence contracts/performance.md#reuse-equivalent-work Only the following synchronous validators borrow this batch; pass sharing uses its independent first-delivery contract.
|
|
63
|
+
* @evidence contracts/performance.md#bound-retention-and-release-resources The caller releases the transaction at the end of synchronous admission; no registry or native handle is acquired.
|
|
64
|
+
*/
|
|
65
|
+
function create(cached, file, epoch) {
|
|
66
|
+
return {
|
|
67
|
+
cached,
|
|
68
|
+
...(sharesPass(cached, file, epoch)
|
|
69
|
+
? {}
|
|
70
|
+
: {
|
|
71
|
+
environments: PluginBuildEnvironmentReadings.cachedAll(selectPluginSourceInputs(cached.result).keys()),
|
|
72
|
+
}),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
TtscGenerationProof.create = create;
|
|
76
|
+
/**
|
|
77
|
+
* Whether this module's first delivery belongs to this generation's proven
|
|
78
|
+
* pass. A missing source baseline cannot acquire this permission.
|
|
79
|
+
*
|
|
80
|
+
* @evidence contracts/common.md#principled-implementation Epoch equality, coherent snapshot or admitted local-pass state, a recorded source and an unserved identity are all required.
|
|
81
|
+
* @evidence contracts/common.md#clear-and-simple-design One predicate is shared by async preparation and synchronous source validation.
|
|
82
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts An incomplete ordinary generation or absent module baseline cannot earn pass reuse.
|
|
83
|
+
* @evidence contracts/common.md#meaningful-documentation Prose states the first-delivery and baseline restrictions.
|
|
84
|
+
* @evidence contracts/portability.md#os-neutral-implementation Baselines use the generation's actual identity and compiler project-key policy.
|
|
85
|
+
* @evidence contracts/performance.md#efficient-algorithms Baseline and served-set lookup avoid full input population traversal.
|
|
86
|
+
* @evidence contracts/performance.md#reuse-equivalent-work Only first deliveries in the same explicitly declared pass share its proof; repeated and later-pass requests do not.
|
|
87
|
+
* @evidenceExclude contracts/performance.md#bound-retention-and-release-resources The predicate borrows generation state without retaining another owner.
|
|
88
|
+
*/
|
|
89
|
+
function sharesPass(cached, file, epoch) {
|
|
90
|
+
if (epoch === undefined ||
|
|
91
|
+
cached.deliveryEpoch !== epoch ||
|
|
92
|
+
(cached.projectSnapshotComplete !== true &&
|
|
93
|
+
cached.passDeliveryOnly !== true) ||
|
|
94
|
+
(cached.freshDeliveryOnly === true && cached.passDeliveryOnly !== true))
|
|
95
|
+
return false;
|
|
96
|
+
const identities = envelopeDerivation(cached).identityContext;
|
|
97
|
+
const identity = pathIdentityKey(file, identities);
|
|
98
|
+
if (cached.servedFiles?.has(identity))
|
|
99
|
+
return false;
|
|
100
|
+
const key = toProjectKey(cached.projectRoot, file, identities);
|
|
101
|
+
return (cached.sourceHashes?.[identity] !== undefined ||
|
|
102
|
+
Object.hasOwn(cached.inputHashes, key) ||
|
|
103
|
+
cached.externalInputHashes?.[identity] !== undefined);
|
|
104
|
+
}
|
|
105
|
+
TtscGenerationProof.sharesPass = sharesPass;
|
|
106
|
+
/**
|
|
107
|
+
* Admit and notify a fresh-only local delivery. A coherent pass-only success
|
|
108
|
+
* can keep its result inside this pass after releasing capture resources;
|
|
109
|
+
* every other fresh-only answer is detached before notifying the host.
|
|
110
|
+
* Callback failure always evicts the incomplete owner.
|
|
111
|
+
*
|
|
112
|
+
* @evidence contracts/common.md#principled-implementation Explicit nonwatching, consistent project lifecycle and cache-withdrawal capability are required on every successful incomplete delivery; retention additionally needs the compile's exact pass-only epoch.
|
|
113
|
+
* @evidence contracts/common.md#clear-and-simple-design One owner handles initial and cached fresh-only admission, resource release and host notification.
|
|
114
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts Incomplete output never acquires a persistent record or publication, and failed/unknown/watching capability cannot leave a reusable owner.
|
|
115
|
+
* @evidence contracts/common.md#meaningful-documentation Native paragraphs distinguish local pass retention, resource release and callback failure effects.
|
|
116
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This lifecycle operation delegates native resource release to the generation disposer.
|
|
117
|
+
* @evidence contracts/performance.md#efficient-algorithms Identity/epoch checks and one callback add no input scan; resource disposal visits the fixed tracker population.
|
|
118
|
+
* @evidence contracts/performance.md#reuse-equivalent-work Only coherent locally admitted output in its exact nonwatching pass survives; a later pass or repeated module must obtain another result.
|
|
119
|
+
* @evidence contracts/performance.md#bound-retention-and-release-resources Capture resources are released even when local output is kept; rejection and callback failure detach the owning Promise, and the cache lifecycle bounds retained result lifetime.
|
|
120
|
+
*/
|
|
121
|
+
function admitFreshOnly(cached, cache, key, generation, epoch, hooks) {
|
|
122
|
+
if (cached.freshDeliveryOnly !== true)
|
|
123
|
+
return;
|
|
124
|
+
const authorized = hooks?.watching === false &&
|
|
125
|
+
hooks.markVolatile !== undefined &&
|
|
126
|
+
(hooks.project?.watching === undefined ||
|
|
127
|
+
hooks.project.watching === false);
|
|
128
|
+
const retain = authorized &&
|
|
129
|
+
epoch !== undefined &&
|
|
130
|
+
cached.deliveryEpoch === epoch &&
|
|
131
|
+
cached.passDeliveryOnly === true;
|
|
132
|
+
disposeCachedTransform(cached);
|
|
133
|
+
if (!retain)
|
|
134
|
+
evictGeneration(cache, key, generation);
|
|
135
|
+
if (cached.result.type === "success" && !authorized)
|
|
136
|
+
throw new Error("@ttsc/unplugin: plugin input observation is unavailable; fresh output requires an explicitly nonwatching host with supported cache withdrawal. Watching, unknown or contradictory lifecycles cannot safely observe its changes.");
|
|
137
|
+
try {
|
|
138
|
+
hooks?.markVolatile?.();
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
evictGeneration(cache, key, generation);
|
|
142
|
+
throw error;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
TtscGenerationProof.admitFreshOnly = admitFreshOnly;
|
|
146
|
+
})(TtscGenerationProof || (TtscGenerationProof = {}));
|
|
147
|
+
|
|
148
|
+
export { TtscGenerationProof };
|
|
149
|
+
//# sourceMappingURL=TtscGenerationProof.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TtscGenerationProof.mjs","sources":["../../../../src/core/transform/validation/TtscGenerationProof.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTransform.cjs";
|
|
2
|
+
import { TtscGenerationProof } from "./TtscGenerationProof.cjs";
|
|
2
3
|
/**
|
|
3
4
|
* Validate a cached project transform against the current on-disk project
|
|
4
5
|
* state.
|
|
@@ -8,17 +9,19 @@ import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTrans
|
|
|
8
9
|
* no source comparison. A cache with a delivery epoch can use that comparison
|
|
9
10
|
* alone for a stable generation's first delivery of each module in the current
|
|
10
11
|
* pass, once the pass's own first delivery has proven the whole generation
|
|
11
|
-
* still matches the filesystem.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
12
|
+
* still matches the filesystem. Incomplete generations cannot claim complete
|
|
13
|
+
* proof. A coherent local success admitted only because its observer was
|
|
14
|
+
* unavailable may share first deliveries in its exact nonwatching pass through
|
|
15
|
+
* TtscGenerationProof; it cannot cross passes or earn persistent authority.
|
|
16
|
+
* Later graph-bearing requests validate the file's derived input set and
|
|
17
|
+
* project membership. A failed result is a diagnostic of the whole loaded
|
|
18
|
+
* program, so its repair cannot be proved by one delivered output's dependency
|
|
19
|
+
* closure. Failed and graph-free envelopes conservatively validate the complete
|
|
20
|
+
* project and out-of-walk snapshots, reusing qualified signatures. A mismatch
|
|
21
|
+
* rejects this generation for the delivery; its caller chooses replacement or
|
|
22
|
+
* capture. Delivered text that differs while the disk still holds the bytes the
|
|
23
|
+
* generation compiled is not one: it is reported and served, since the compile
|
|
24
|
+
* read the disk (samchon/ttsc#1394).
|
|
22
25
|
*
|
|
23
26
|
* Its place in the adapter's invalidation model, and the units beside it, are
|
|
24
27
|
* mapped in the maintainer page
|
|
@@ -26,7 +29,7 @@ import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTrans
|
|
|
26
29
|
*
|
|
27
30
|
* @evidence contracts/common.md#principled-implementation Delivered source, generation completeness, pass identity and notification authority choose between first-delivery proof, derived-input validation and complete snapshots; divergent editor text never substitutes for compiler disk inputs.
|
|
28
31
|
* @evidence contracts/common.md#clear-and-simple-design This admission boundary chooses the required proof while dedicated validators own membership, universal inputs and content comparisons.
|
|
29
|
-
* @evidence contracts/common.md#prohibited-implementation-shortcuts An incomplete generation cannot
|
|
32
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts An incomplete generation cannot claim complete snapshot authority; only separately admitted coherent local success can share first deliveries of its exact nonwatching pass; inherited object members cannot invent a project baseline, and losing watcher proof falls back to recorded-state validation.
|
|
30
33
|
* @evidence contracts/common.md#meaningful-documentation Separate native paragraphs explain disk-versus-delivered authority, epoch qualification, fallback and related maintainer guidance before tags.
|
|
31
34
|
* @evidence contracts/portability.md#os-neutral-implementation Project membership and path identity use recorded compiler case policy and injected native operations; OS names do not certify case sensitivity or watcher capabilities.
|
|
32
35
|
* @evidence contracts/performance.md#bound-retention-and-release-resources
|
|
@@ -36,13 +39,13 @@ import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTrans
|
|
|
36
39
|
* while validators replace current signature/directory witnesses. No new
|
|
37
40
|
* independent handle or historical epoch collection is acquired here.
|
|
38
41
|
* @evidence contracts/performance.md#efficient-algorithms Every admission first replays all generation-owned typed config predicates; this mandatory cost includes native queries, file bytes or directory membership independently of watcher/epoch qualification.
|
|
39
|
-
*
|
|
42
|
+
* Unsupported fresh-only rejection precedes source baseline work. Baseline-bearing paths
|
|
40
43
|
* hash delivered text and divergent paths read/hash host bytes; unrelated
|
|
41
44
|
* absent outputs can return before that hash after an initial K-output index.
|
|
42
45
|
* Epoch-qualified first checkpoints share the complete proof. Other paths
|
|
43
46
|
* pay derived-input or complete project/external/universal proof costs,
|
|
44
47
|
* including path/byte populations, native observations and clock refresh.
|
|
45
|
-
* @evidence contracts/performance.md#reuse-equivalent-work Typed config predicate replay
|
|
48
|
+
* @evidence contracts/performance.md#reuse-equivalent-work Typed config predicate replay remains mandatory for every delivery and shares only the current synchronous transaction with nested validators; immutable membership is indexed separately. A complete generation earns one whole-snapshot proof per new delivery epoch; later first deliveries share it, while repeated or persistent deliveries revalidate their authoritative dependency scope.
|
|
46
49
|
*/
|
|
47
50
|
export declare function matchesCachedSource(
|
|
48
51
|
/** Generation retaining recorded baselines and distinct proof authority. */
|
|
@@ -52,4 +55,4 @@ file: string,
|
|
|
52
55
|
/** Delivered text, compared with the recorded baseline rather than adopted. */
|
|
53
56
|
source: string,
|
|
54
57
|
/** Current host pass, or undefined for persistent input validation. */
|
|
55
|
-
epoch: number | undefined): boolean;
|
|
58
|
+
epoch: number | undefined, proof?: TtscGenerationProof.Transaction): boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTransform.mjs";
|
|
2
|
+
import { TtscGenerationProof } from "./TtscGenerationProof.mjs";
|
|
2
3
|
/**
|
|
3
4
|
* Validate a cached project transform against the current on-disk project
|
|
4
5
|
* state.
|
|
@@ -8,17 +9,19 @@ import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTrans
|
|
|
8
9
|
* no source comparison. A cache with a delivery epoch can use that comparison
|
|
9
10
|
* alone for a stable generation's first delivery of each module in the current
|
|
10
11
|
* pass, once the pass's own first delivery has proven the whole generation
|
|
11
|
-
* still matches the filesystem.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
12
|
+
* still matches the filesystem. Incomplete generations cannot claim complete
|
|
13
|
+
* proof. A coherent local success admitted only because its observer was
|
|
14
|
+
* unavailable may share first deliveries in its exact nonwatching pass through
|
|
15
|
+
* TtscGenerationProof; it cannot cross passes or earn persistent authority.
|
|
16
|
+
* Later graph-bearing requests validate the file's derived input set and
|
|
17
|
+
* project membership. A failed result is a diagnostic of the whole loaded
|
|
18
|
+
* program, so its repair cannot be proved by one delivered output's dependency
|
|
19
|
+
* closure. Failed and graph-free envelopes conservatively validate the complete
|
|
20
|
+
* project and out-of-walk snapshots, reusing qualified signatures. A mismatch
|
|
21
|
+
* rejects this generation for the delivery; its caller chooses replacement or
|
|
22
|
+
* capture. Delivered text that differs while the disk still holds the bytes the
|
|
23
|
+
* generation compiled is not one: it is reported and served, since the compile
|
|
24
|
+
* read the disk (samchon/ttsc#1394).
|
|
22
25
|
*
|
|
23
26
|
* Its place in the adapter's invalidation model, and the units beside it, are
|
|
24
27
|
* mapped in the maintainer page
|
|
@@ -26,7 +29,7 @@ import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTrans
|
|
|
26
29
|
*
|
|
27
30
|
* @evidence contracts/common.md#principled-implementation Delivered source, generation completeness, pass identity and notification authority choose between first-delivery proof, derived-input validation and complete snapshots; divergent editor text never substitutes for compiler disk inputs.
|
|
28
31
|
* @evidence contracts/common.md#clear-and-simple-design This admission boundary chooses the required proof while dedicated validators own membership, universal inputs and content comparisons.
|
|
29
|
-
* @evidence contracts/common.md#prohibited-implementation-shortcuts An incomplete generation cannot
|
|
32
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts An incomplete generation cannot claim complete snapshot authority; only separately admitted coherent local success can share first deliveries of its exact nonwatching pass; inherited object members cannot invent a project baseline, and losing watcher proof falls back to recorded-state validation.
|
|
30
33
|
* @evidence contracts/common.md#meaningful-documentation Separate native paragraphs explain disk-versus-delivered authority, epoch qualification, fallback and related maintainer guidance before tags.
|
|
31
34
|
* @evidence contracts/portability.md#os-neutral-implementation Project membership and path identity use recorded compiler case policy and injected native operations; OS names do not certify case sensitivity or watcher capabilities.
|
|
32
35
|
* @evidence contracts/performance.md#bound-retention-and-release-resources
|
|
@@ -36,13 +39,13 @@ import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTrans
|
|
|
36
39
|
* while validators replace current signature/directory witnesses. No new
|
|
37
40
|
* independent handle or historical epoch collection is acquired here.
|
|
38
41
|
* @evidence contracts/performance.md#efficient-algorithms Every admission first replays all generation-owned typed config predicates; this mandatory cost includes native queries, file bytes or directory membership independently of watcher/epoch qualification.
|
|
39
|
-
*
|
|
42
|
+
* Unsupported fresh-only rejection precedes source baseline work. Baseline-bearing paths
|
|
40
43
|
* hash delivered text and divergent paths read/hash host bytes; unrelated
|
|
41
44
|
* absent outputs can return before that hash after an initial K-output index.
|
|
42
45
|
* Epoch-qualified first checkpoints share the complete proof. Other paths
|
|
43
46
|
* pay derived-input or complete project/external/universal proof costs,
|
|
44
47
|
* including path/byte populations, native observations and clock refresh.
|
|
45
|
-
* @evidence contracts/performance.md#reuse-equivalent-work Typed config predicate replay
|
|
48
|
+
* @evidence contracts/performance.md#reuse-equivalent-work Typed config predicate replay remains mandatory for every delivery and shares only the current synchronous transaction with nested validators; immutable membership is indexed separately. A complete generation earns one whole-snapshot proof per new delivery epoch; later first deliveries share it, while repeated or persistent deliveries revalidate their authoritative dependency scope.
|
|
46
49
|
*/
|
|
47
50
|
export declare function matchesCachedSource(
|
|
48
51
|
/** Generation retaining recorded baselines and distinct proof authority. */
|
|
@@ -52,4 +55,4 @@ file: string,
|
|
|
52
55
|
/** Delivered text, compared with the recorded baseline rather than adopted. */
|
|
53
56
|
source: string,
|
|
54
57
|
/** Current host pass, or undefined for persistent input validation. */
|
|
55
|
-
epoch: number | undefined): boolean;
|
|
58
|
+
epoch: number | undefined, proof?: TtscGenerationProof.Transaction): boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTransform";
|
|
2
|
+
import { TtscGenerationProof } from "./TtscGenerationProof";
|
|
2
3
|
/**
|
|
3
4
|
* Validate a cached project transform against the current on-disk project
|
|
4
5
|
* state.
|
|
@@ -8,17 +9,19 @@ import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTrans
|
|
|
8
9
|
* no source comparison. A cache with a delivery epoch can use that comparison
|
|
9
10
|
* alone for a stable generation's first delivery of each module in the current
|
|
10
11
|
* pass, once the pass's own first delivery has proven the whole generation
|
|
11
|
-
* still matches the filesystem.
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
12
|
+
* still matches the filesystem. Incomplete generations cannot claim complete
|
|
13
|
+
* proof. A coherent local success admitted only because its observer was
|
|
14
|
+
* unavailable may share first deliveries in its exact nonwatching pass through
|
|
15
|
+
* TtscGenerationProof; it cannot cross passes or earn persistent authority.
|
|
16
|
+
* Later graph-bearing requests validate the file's derived input set and
|
|
17
|
+
* project membership. A failed result is a diagnostic of the whole loaded
|
|
18
|
+
* program, so its repair cannot be proved by one delivered output's dependency
|
|
19
|
+
* closure. Failed and graph-free envelopes conservatively validate the complete
|
|
20
|
+
* project and out-of-walk snapshots, reusing qualified signatures. A mismatch
|
|
21
|
+
* rejects this generation for the delivery; its caller chooses replacement or
|
|
22
|
+
* capture. Delivered text that differs while the disk still holds the bytes the
|
|
23
|
+
* generation compiled is not one: it is reported and served, since the compile
|
|
24
|
+
* read the disk (samchon/ttsc#1394).
|
|
22
25
|
*
|
|
23
26
|
* Its place in the adapter's invalidation model, and the units beside it, are
|
|
24
27
|
* mapped in the maintainer page
|
|
@@ -26,7 +29,7 @@ import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTrans
|
|
|
26
29
|
*
|
|
27
30
|
* @evidence contracts/common.md#principled-implementation Delivered source, generation completeness, pass identity and notification authority choose between first-delivery proof, derived-input validation and complete snapshots; divergent editor text never substitutes for compiler disk inputs.
|
|
28
31
|
* @evidence contracts/common.md#clear-and-simple-design This admission boundary chooses the required proof while dedicated validators own membership, universal inputs and content comparisons.
|
|
29
|
-
* @evidence contracts/common.md#prohibited-implementation-shortcuts An incomplete generation cannot
|
|
32
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts An incomplete generation cannot claim complete snapshot authority; only separately admitted coherent local success can share first deliveries of its exact nonwatching pass; inherited object members cannot invent a project baseline, and losing watcher proof falls back to recorded-state validation.
|
|
30
33
|
* @evidence contracts/common.md#meaningful-documentation Separate native paragraphs explain disk-versus-delivered authority, epoch qualification, fallback and related maintainer guidance before tags.
|
|
31
34
|
* @evidence contracts/portability.md#os-neutral-implementation Project membership and path identity use recorded compiler case policy and injected native operations; OS names do not certify case sensitivity or watcher capabilities.
|
|
32
35
|
* @evidence contracts/performance.md#bound-retention-and-release-resources
|
|
@@ -36,13 +39,13 @@ import type { TtscCachedProjectTransform } from "../cache/TtscCachedProjectTrans
|
|
|
36
39
|
* while validators replace current signature/directory witnesses. No new
|
|
37
40
|
* independent handle or historical epoch collection is acquired here.
|
|
38
41
|
* @evidence contracts/performance.md#efficient-algorithms Every admission first replays all generation-owned typed config predicates; this mandatory cost includes native queries, file bytes or directory membership independently of watcher/epoch qualification.
|
|
39
|
-
*
|
|
42
|
+
* Unsupported fresh-only rejection precedes source baseline work. Baseline-bearing paths
|
|
40
43
|
* hash delivered text and divergent paths read/hash host bytes; unrelated
|
|
41
44
|
* absent outputs can return before that hash after an initial K-output index.
|
|
42
45
|
* Epoch-qualified first checkpoints share the complete proof. Other paths
|
|
43
46
|
* pay derived-input or complete project/external/universal proof costs,
|
|
44
47
|
* including path/byte populations, native observations and clock refresh.
|
|
45
|
-
* @evidence contracts/performance.md#reuse-equivalent-work Typed config predicate replay
|
|
48
|
+
* @evidence contracts/performance.md#reuse-equivalent-work Typed config predicate replay remains mandatory for every delivery and shares only the current synchronous transaction with nested validators; immutable membership is indexed separately. A complete generation earns one whole-snapshot proof per new delivery epoch; later first deliveries share it, while repeated or persistent deliveries revalidate their authoritative dependency scope.
|
|
46
49
|
*/
|
|
47
50
|
export declare function matchesCachedSource(
|
|
48
51
|
/** Generation retaining recorded baselines and distinct proof authority. */
|
|
@@ -52,4 +55,4 @@ file: string,
|
|
|
52
55
|
/** Delivered text, compared with the recorded baseline rather than adopted. */
|
|
53
56
|
source: string,
|
|
54
57
|
/** Current host pass, or undefined for persistent input validation. */
|
|
55
|
-
epoch: number | undefined): boolean;
|
|
58
|
+
epoch: number | undefined, proof?: TtscGenerationProof.Transaction): boolean;
|
|
@@ -11,6 +11,7 @@ var pathIdentityKey = require('../filesystem/pathIdentityKey.js');
|
|
|
11
11
|
var hostInputStateHash = require('../inputs/hostInputStateHash.js');
|
|
12
12
|
var toProjectKey = require('../project/toProjectKey.js');
|
|
13
13
|
var hashText = require('../utils/hashText.js');
|
|
14
|
+
var TtscGenerationProof = require('./TtscGenerationProof.js');
|
|
14
15
|
var matchesCompleteInputSnapshot = require('./matchesCompleteInputSnapshot.js');
|
|
15
16
|
var matchesNarrowPersistentInputs = require('./matchesNarrowPersistentInputs.js');
|
|
16
17
|
var nativeInputPredicatesHold = require('./nativeInputPredicatesHold.js');
|
|
@@ -25,17 +26,19 @@ var notificationsProveProgramUnchanged = require('./notificationsProveProgramUnc
|
|
|
25
26
|
* no source comparison. A cache with a delivery epoch can use that comparison
|
|
26
27
|
* alone for a stable generation's first delivery of each module in the current
|
|
27
28
|
* pass, once the pass's own first delivery has proven the whole generation
|
|
28
|
-
* still matches the filesystem.
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
29
|
+
* still matches the filesystem. Incomplete generations cannot claim complete
|
|
30
|
+
* proof. A coherent local success admitted only because its observer was
|
|
31
|
+
* unavailable may share first deliveries in its exact nonwatching pass through
|
|
32
|
+
* TtscGenerationProof; it cannot cross passes or earn persistent authority.
|
|
33
|
+
* Later graph-bearing requests validate the file's derived input set and
|
|
34
|
+
* project membership. A failed result is a diagnostic of the whole loaded
|
|
35
|
+
* program, so its repair cannot be proved by one delivered output's dependency
|
|
36
|
+
* closure. Failed and graph-free envelopes conservatively validate the complete
|
|
37
|
+
* project and out-of-walk snapshots, reusing qualified signatures. A mismatch
|
|
38
|
+
* rejects this generation for the delivery; its caller chooses replacement or
|
|
39
|
+
* capture. Delivered text that differs while the disk still holds the bytes the
|
|
40
|
+
* generation compiled is not one: it is reported and served, since the compile
|
|
41
|
+
* read the disk (samchon/ttsc#1394).
|
|
39
42
|
*
|
|
40
43
|
* Its place in the adapter's invalidation model, and the units beside it, are
|
|
41
44
|
* mapped in the maintainer page
|
|
@@ -43,7 +46,7 @@ var notificationsProveProgramUnchanged = require('./notificationsProveProgramUnc
|
|
|
43
46
|
*
|
|
44
47
|
* @evidence contracts/common.md#principled-implementation Delivered source, generation completeness, pass identity and notification authority choose between first-delivery proof, derived-input validation and complete snapshots; divergent editor text never substitutes for compiler disk inputs.
|
|
45
48
|
* @evidence contracts/common.md#clear-and-simple-design This admission boundary chooses the required proof while dedicated validators own membership, universal inputs and content comparisons.
|
|
46
|
-
* @evidence contracts/common.md#prohibited-implementation-shortcuts An incomplete generation cannot
|
|
49
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts An incomplete generation cannot claim complete snapshot authority; only separately admitted coherent local success can share first deliveries of its exact nonwatching pass; inherited object members cannot invent a project baseline, and losing watcher proof falls back to recorded-state validation.
|
|
47
50
|
* @evidence contracts/common.md#meaningful-documentation Separate native paragraphs explain disk-versus-delivered authority, epoch qualification, fallback and related maintainer guidance before tags.
|
|
48
51
|
* @evidence contracts/portability.md#os-neutral-implementation Project membership and path identity use recorded compiler case policy and injected native operations; OS names do not certify case sensitivity or watcher capabilities.
|
|
49
52
|
* @evidence contracts/performance.md#bound-retention-and-release-resources
|
|
@@ -53,13 +56,13 @@ var notificationsProveProgramUnchanged = require('./notificationsProveProgramUnc
|
|
|
53
56
|
* while validators replace current signature/directory witnesses. No new
|
|
54
57
|
* independent handle or historical epoch collection is acquired here.
|
|
55
58
|
* @evidence contracts/performance.md#efficient-algorithms Every admission first replays all generation-owned typed config predicates; this mandatory cost includes native queries, file bytes or directory membership independently of watcher/epoch qualification.
|
|
56
|
-
*
|
|
59
|
+
* Unsupported fresh-only rejection precedes source baseline work. Baseline-bearing paths
|
|
57
60
|
* hash delivered text and divergent paths read/hash host bytes; unrelated
|
|
58
61
|
* absent outputs can return before that hash after an initial K-output index.
|
|
59
62
|
* Epoch-qualified first checkpoints share the complete proof. Other paths
|
|
60
63
|
* pay derived-input or complete project/external/universal proof costs,
|
|
61
64
|
* including path/byte populations, native observations and clock refresh.
|
|
62
|
-
* @evidence contracts/performance.md#reuse-equivalent-work Typed config predicate replay
|
|
65
|
+
* @evidence contracts/performance.md#reuse-equivalent-work Typed config predicate replay remains mandatory for every delivery and shares only the current synchronous transaction with nested validators; immutable membership is indexed separately. A complete generation earns one whole-snapshot proof per new delivery epoch; later first deliveries share it, while repeated or persistent deliveries revalidate their authoritative dependency scope.
|
|
63
66
|
*/
|
|
64
67
|
function matchesCachedSource(
|
|
65
68
|
/** Generation retaining recorded baselines and distinct proof authority. */
|
|
@@ -69,10 +72,11 @@ file,
|
|
|
69
72
|
/** Delivered text, compared with the recorded baseline rather than adopted. */
|
|
70
73
|
source,
|
|
71
74
|
/** Current host pass, or undefined for persistent input validation. */
|
|
72
|
-
epoch) {
|
|
73
|
-
if (!nativeInputPredicatesHold.nativeInputPredicatesHold(cached))
|
|
75
|
+
epoch, proof) {
|
|
76
|
+
if (!nativeInputPredicatesHold.nativeInputPredicatesHold(cached, proof))
|
|
74
77
|
return false;
|
|
75
|
-
|
|
78
|
+
const pass = TtscGenerationProof.TtscGenerationProof.sharesPass(cached, file, epoch);
|
|
79
|
+
if (cached.freshDeliveryOnly === true && !pass)
|
|
76
80
|
return false;
|
|
77
81
|
const identities = envelopeDerivation.envelopeDerivation(cached).identityContext;
|
|
78
82
|
const currentKey = toProjectKey.toProjectKey(cached.projectRoot, file, identities);
|
|
@@ -90,7 +94,7 @@ epoch) {
|
|
|
90
94
|
if (!outputs.has(identity)) {
|
|
91
95
|
// While the watchers prove the program unchanged, the module is still
|
|
92
96
|
// outside it, and no walk is needed to say so (samchon/ttsc#1398).
|
|
93
|
-
if (notificationsProveProgramUnchanged.notificationsProveProgramUnchanged(cached)) {
|
|
97
|
+
if (notificationsProveProgramUnchanged.notificationsProveProgramUnchanged(cached, proof)) {
|
|
94
98
|
return true;
|
|
95
99
|
}
|
|
96
100
|
// Root discovery deliberately never hashed this unrelated module. Its
|
|
@@ -98,7 +102,7 @@ epoch) {
|
|
|
98
102
|
// whole program must still be current before we reuse that absence: a
|
|
99
103
|
// changed config or importer can bring this file into the next program.
|
|
100
104
|
refreshFilesystemClockReference.refreshFilesystemClockReference(TRANSFORM_CLOCK_REFERENCE_DIRECTORIES.TRANSFORM_CLOCK_REFERENCE_DIRECTORIES.get(cached), resultFilesystem.resultFilesystem(cached.result));
|
|
101
|
-
return matchesCompleteInputSnapshot.matchesCompleteInputSnapshot(cached);
|
|
105
|
+
return matchesCompleteInputSnapshot.matchesCompleteInputSnapshot(cached, proof);
|
|
102
106
|
}
|
|
103
107
|
}
|
|
104
108
|
if (expected !== hashText.hashText(source)) {
|
|
@@ -113,6 +117,8 @@ epoch) {
|
|
|
113
117
|
}
|
|
114
118
|
reportDivergentDelivery.reportDivergentDelivery(cached, file);
|
|
115
119
|
}
|
|
120
|
+
if (pass)
|
|
121
|
+
return true;
|
|
116
122
|
if (epoch !== undefined && cached.projectSnapshotComplete === true) {
|
|
117
123
|
if (cached.deliveryEpoch !== epoch) {
|
|
118
124
|
// The pass's first delivery. The generation was settled against an
|
|
@@ -122,7 +128,7 @@ epoch) {
|
|
|
122
128
|
// settled against it. That proof is what a per-pass recompile used to buy
|
|
123
129
|
// (samchon/ttsc#1300), at a walk instead of a compile.
|
|
124
130
|
refreshFilesystemClockReference.refreshFilesystemClockReference(TRANSFORM_CLOCK_REFERENCE_DIRECTORIES.TRANSFORM_CLOCK_REFERENCE_DIRECTORIES.get(cached), resultFilesystem.resultFilesystem(cached.result));
|
|
125
|
-
if (!matchesCompleteInputSnapshot.matchesCompleteInputSnapshot(cached)) {
|
|
131
|
+
if (!matchesCompleteInputSnapshot.matchesCompleteInputSnapshot(cached, proof)) {
|
|
126
132
|
return false;
|
|
127
133
|
}
|
|
128
134
|
cached.deliveryEpoch = epoch;
|
|
@@ -140,7 +146,7 @@ epoch) {
|
|
|
140
146
|
cached.projectDirectories !== undefined &&
|
|
141
147
|
cached.projectMutationTracker !== undefined &&
|
|
142
148
|
cached.hostInputMutationTracker !== undefined) {
|
|
143
|
-
const narrow = matchesNarrowPersistentInputs.matchesNarrowPersistentInputs(cached, file);
|
|
149
|
+
const narrow = matchesNarrowPersistentInputs.matchesNarrowPersistentInputs(cached, file, proof);
|
|
144
150
|
if (narrow !== undefined) {
|
|
145
151
|
return narrow;
|
|
146
152
|
}
|
|
@@ -148,7 +154,7 @@ epoch) {
|
|
|
148
154
|
// produced. Losing the proof is not evidence of a change, so fall through
|
|
149
155
|
// to the snapshot the entry still carries.
|
|
150
156
|
}
|
|
151
|
-
return matchesCompleteInputSnapshot.matchesCompleteInputSnapshot(cached);
|
|
157
|
+
return matchesCompleteInputSnapshot.matchesCompleteInputSnapshot(cached, proof);
|
|
152
158
|
}
|
|
153
159
|
|
|
154
160
|
exports.matchesCachedSource = matchesCachedSource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matchesCachedSource.js","sources":["../../../../src/core/transform/validation/matchesCachedSource.ts"],"sourcesContent":[null],"names":["nativeInputPredicatesHold","envelopeDerivation","toProjectKey","pathIdentityKey","matchesProjectRootFile","resultFilesystem","createEnvelopeKeyIndex","notificationsProveProgramUnchanged","refreshFilesystemClockReference","TRANSFORM_CLOCK_REFERENCE_DIRECTORIES","matchesCompleteInputSnapshot","hashText","hostInputStateHash","reportDivergentDelivery","matchesNarrowPersistentInputs"],"mappings":"
|
|
1
|
+
{"version":3,"file":"matchesCachedSource.js","sources":["../../../../src/core/transform/validation/matchesCachedSource.ts"],"sourcesContent":[null],"names":["nativeInputPredicatesHold","TtscGenerationProof","envelopeDerivation","toProjectKey","pathIdentityKey","matchesProjectRootFile","resultFilesystem","createEnvelopeKeyIndex","notificationsProveProgramUnchanged","refreshFilesystemClockReference","TRANSFORM_CLOCK_REFERENCE_DIRECTORIES","matchesCompleteInputSnapshot","hashText","hostInputStateHash","reportDivergentDelivery","matchesNarrowPersistentInputs"],"mappings":"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"}
|