@smthrs/engine-store 1.0.0-rc.5 → 1.0.0-rc.7
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/README.md +15 -15
- package/dist/cjs/ArtifactGc.d.ts +1 -1
- package/dist/cjs/ArtifactGc.d.ts.map +1 -1
- package/dist/cjs/ArtifactGc.js +1 -1
- package/dist/cjs/ArtifactGc.js.map +1 -1
- package/dist/cjs/DeferredClockFold.d.ts +4 -4
- package/dist/cjs/DeferredClockFold.d.ts.map +1 -1
- package/dist/cjs/DeferredClockFold.js +1 -1
- package/dist/cjs/DeferredClockFold.js.map +1 -1
- package/dist/cjs/DisasterRecovery.d.ts +1 -1
- package/dist/cjs/DisasterRecovery.d.ts.map +1 -1
- package/dist/cjs/DisasterRecovery.js +1 -1
- package/dist/cjs/DisasterRecovery.js.map +1 -1
- package/dist/cjs/DurableEngineState.d.ts +1 -1
- package/dist/cjs/DurableEngineState.d.ts.map +1 -1
- package/dist/cjs/DurableEngineState.js +1 -1
- package/dist/cjs/DurableEngineState.js.map +1 -1
- package/dist/cjs/ExecutionSnapshot.d.ts +2 -2
- package/dist/cjs/ExecutionSnapshot.d.ts.map +1 -1
- package/dist/cjs/ExecutionSnapshot.js +1 -1
- package/dist/cjs/ExecutionSnapshot.js.map +1 -1
- package/dist/cjs/Migrations.d.ts +2 -2
- package/dist/cjs/Migrations.d.ts.map +1 -1
- package/dist/cjs/OwnerIdentity.js +1 -1
- package/dist/cjs/OwnerIdentity.js.map +2 -2
- package/dist/cjs/PlanInputStore.d.ts +1 -1
- package/dist/cjs/PlanInputStore.d.ts.map +1 -1
- package/dist/cjs/PlanInputStore.js +1 -1
- package/dist/cjs/PlanInputStore.js.map +1 -1
- package/dist/cjs/PlanMergeStore.d.ts +1 -1
- package/dist/cjs/PlanMergeStore.d.ts.map +1 -1
- package/dist/cjs/PlanMergeStore.js +1 -1
- package/dist/cjs/PlanMergeStore.js.map +1 -1
- package/dist/cjs/Retention.d.ts +2 -2
- package/dist/cjs/Retention.d.ts.map +1 -1
- package/dist/cjs/Retention.js +1 -1
- package/dist/cjs/Retention.js.map +1 -1
- package/dist/cjs/RunChangeFeed.d.ts +1 -1
- package/dist/cjs/RunChangeFeed.d.ts.map +1 -1
- package/dist/cjs/RunChangeFeed.js +1 -1
- package/dist/cjs/RunChangeFeed.js.map +1 -1
- package/dist/cjs/SelectionStore.d.ts +1 -1
- package/dist/cjs/SelectionStore.d.ts.map +1 -1
- package/dist/cjs/SelectionStore.js +1 -1
- package/dist/cjs/SelectionStore.js.map +1 -1
- package/dist/cjs/StepBoundary.d.ts +8 -6
- package/dist/cjs/StepBoundary.d.ts.map +1 -1
- package/dist/cjs/StepBoundary.js +13 -10
- package/dist/cjs/StepBoundary.js.map +2 -2
- package/dist/cjs/StepCacheFold.d.ts +2 -2
- package/dist/cjs/StepCacheFold.d.ts.map +1 -1
- package/dist/cjs/StepCacheFold.js +1 -1
- package/dist/cjs/StepCacheFold.js.map +1 -1
- package/dist/cjs/internal/EngineStateSchema.d.ts +1 -1
- package/dist/cjs/internal/EngineStateSchema.d.ts.map +1 -1
- package/dist/cjs/internal/EngineStateSchema.js.map +1 -1
- package/dist/cjs/internal/ExecutionSnapshotRead.d.ts +3 -3
- package/dist/cjs/internal/ExecutionSnapshotRead.d.ts.map +1 -1
- package/dist/cjs/internal/ExecutionSnapshotRead.js.map +1 -1
- package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts +1 -1
- package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts.map +1 -1
- package/dist/cjs/internal/ExecutionSnapshotRelations.js.map +1 -1
- package/dist/cjs/internal/RetentionOps.d.ts +2 -2
- package/dist/cjs/internal/RetentionOps.d.ts.map +1 -1
- package/dist/cjs/internal/RetentionOps.js +1 -1
- package/dist/cjs/internal/RetentionOps.js.map +1 -1
- package/dist/cjs/internal/RunCatalogOps.d.ts +1 -1
- package/dist/cjs/internal/RunCatalogOps.d.ts.map +1 -1
- package/dist/cjs/internal/RunCatalogOps.js +1 -1
- package/dist/cjs/internal/RunCatalogOps.js.map +1 -1
- package/dist/cjs/internal/RunListing.d.ts +1 -1
- package/dist/cjs/internal/RunListing.d.ts.map +1 -1
- package/dist/cjs/internal/RunListing.js +1 -1
- package/dist/cjs/internal/RunListing.js.map +1 -1
- package/dist/cjs/migrations/0001_initial.d.ts +1 -1
- package/dist/cjs/migrations/0001_initial.d.ts.map +1 -1
- package/dist/cjs/migrations/0001_initial.js +1 -1
- package/dist/cjs/migrations/0001_initial.js.map +1 -1
- package/dist/cjs/migrations/0002_selection_store.d.ts +1 -1
- package/dist/cjs/migrations/0002_selection_store.d.ts.map +1 -1
- package/dist/cjs/migrations/0002_selection_store.js +1 -1
- package/dist/cjs/migrations/0002_selection_store.js.map +1 -1
- package/dist/cjs/migrations/0003_plan_inputs.d.ts +1 -1
- package/dist/cjs/migrations/0003_plan_inputs.d.ts.map +1 -1
- package/dist/cjs/migrations/0003_plan_inputs.js +1 -1
- package/dist/cjs/migrations/0003_plan_inputs.js.map +1 -1
- package/dist/cjs/migrations/0004_plan_environment.d.ts +1 -1
- package/dist/cjs/migrations/0004_plan_environment.d.ts.map +1 -1
- package/dist/cjs/migrations/0004_plan_environment.js +1 -1
- package/dist/cjs/migrations/0004_plan_environment.js.map +1 -1
- package/dist/cjs/migrations/0005_plan_merges.d.ts +1 -1
- package/dist/cjs/migrations/0005_plan_merges.d.ts.map +1 -1
- package/dist/cjs/migrations/0005_plan_merges.js +1 -1
- package/dist/cjs/migrations/0005_plan_merges.js.map +1 -1
- package/dist/cjs/migrations/0006_execution_listing.d.ts +1 -1
- package/dist/cjs/migrations/0006_execution_listing.d.ts.map +1 -1
- package/dist/cjs/migrations/0006_execution_listing.js +1 -1
- package/dist/cjs/migrations/0006_execution_listing.js.map +1 -1
- package/dist/cjs/migrations/0007_run_parent_sequence.d.ts +1 -1
- package/dist/cjs/migrations/0007_run_parent_sequence.d.ts.map +1 -1
- package/dist/cjs/migrations/0007_run_parent_sequence.js +1 -1
- package/dist/cjs/migrations/0007_run_parent_sequence.js.map +1 -1
- package/dist/cjs/migrations/0008_deferred_consumption.d.ts +1 -1
- package/dist/cjs/migrations/0008_deferred_consumption.d.ts.map +1 -1
- package/dist/cjs/migrations/0008_deferred_consumption.js +1 -1
- package/dist/cjs/migrations/0008_deferred_consumption.js.map +1 -1
- package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts +1 -1
- package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts.map +1 -1
- package/dist/cjs/migrations/0009_deferred_clock_facts.js +1 -1
- package/dist/cjs/migrations/0009_deferred_clock_facts.js.map +1 -1
- package/dist/cjs/migrations/0010_pending_cancellation.d.ts +1 -1
- package/dist/cjs/migrations/0010_pending_cancellation.d.ts.map +1 -1
- package/dist/cjs/migrations/0010_pending_cancellation.js +1 -1
- package/dist/cjs/migrations/0010_pending_cancellation.js.map +1 -1
- package/dist/cjs/test/TestStores.d.ts +4 -4
- package/dist/cjs/test/TestStores.d.ts.map +1 -1
- package/dist/esm/ArtifactGc.d.ts +1 -1
- package/dist/esm/ArtifactGc.d.ts.map +1 -1
- package/dist/esm/ArtifactGc.js +1 -1
- package/dist/esm/ArtifactGc.js.map +1 -1
- package/dist/esm/DeferredClockFold.d.ts +4 -4
- package/dist/esm/DeferredClockFold.d.ts.map +1 -1
- package/dist/esm/DeferredClockFold.js +1 -1
- package/dist/esm/DeferredClockFold.js.map +1 -1
- package/dist/esm/DisasterRecovery.d.ts +1 -1
- package/dist/esm/DisasterRecovery.d.ts.map +1 -1
- package/dist/esm/DisasterRecovery.js +1 -1
- package/dist/esm/DisasterRecovery.js.map +1 -1
- package/dist/esm/DurableEngineState.d.ts +1 -1
- package/dist/esm/DurableEngineState.d.ts.map +1 -1
- package/dist/esm/DurableEngineState.js +1 -1
- package/dist/esm/DurableEngineState.js.map +1 -1
- package/dist/esm/ExecutionSnapshot.d.ts +2 -2
- package/dist/esm/ExecutionSnapshot.d.ts.map +1 -1
- package/dist/esm/ExecutionSnapshot.js +1 -1
- package/dist/esm/ExecutionSnapshot.js.map +1 -1
- package/dist/esm/Migrations.d.ts +2 -2
- package/dist/esm/Migrations.d.ts.map +1 -1
- package/dist/esm/OwnerIdentity.js +1 -1
- package/dist/esm/OwnerIdentity.js.map +1 -1
- package/dist/esm/PlanInputStore.d.ts +1 -1
- package/dist/esm/PlanInputStore.d.ts.map +1 -1
- package/dist/esm/PlanInputStore.js +1 -1
- package/dist/esm/PlanInputStore.js.map +1 -1
- package/dist/esm/PlanMergeStore.d.ts +1 -1
- package/dist/esm/PlanMergeStore.d.ts.map +1 -1
- package/dist/esm/PlanMergeStore.js +1 -1
- package/dist/esm/PlanMergeStore.js.map +1 -1
- package/dist/esm/Retention.d.ts +2 -2
- package/dist/esm/Retention.d.ts.map +1 -1
- package/dist/esm/Retention.js +1 -1
- package/dist/esm/Retention.js.map +1 -1
- package/dist/esm/RunChangeFeed.d.ts +1 -1
- package/dist/esm/RunChangeFeed.d.ts.map +1 -1
- package/dist/esm/RunChangeFeed.js +1 -1
- package/dist/esm/RunChangeFeed.js.map +1 -1
- package/dist/esm/SelectionStore.d.ts +1 -1
- package/dist/esm/SelectionStore.d.ts.map +1 -1
- package/dist/esm/SelectionStore.js +1 -1
- package/dist/esm/SelectionStore.js.map +1 -1
- package/dist/esm/StepBoundary.d.ts +8 -6
- package/dist/esm/StepBoundary.d.ts.map +1 -1
- package/dist/esm/StepBoundary.js +20 -11
- package/dist/esm/StepBoundary.js.map +1 -1
- package/dist/esm/StepCacheFold.d.ts +2 -2
- package/dist/esm/StepCacheFold.d.ts.map +1 -1
- package/dist/esm/StepCacheFold.js +1 -1
- package/dist/esm/StepCacheFold.js.map +1 -1
- package/dist/esm/internal/EngineStateSchema.d.ts +1 -1
- package/dist/esm/internal/EngineStateSchema.d.ts.map +1 -1
- package/dist/esm/internal/EngineStateSchema.js.map +1 -1
- package/dist/esm/internal/ExecutionSnapshotRead.d.ts +3 -3
- package/dist/esm/internal/ExecutionSnapshotRead.d.ts.map +1 -1
- package/dist/esm/internal/ExecutionSnapshotRead.js.map +1 -1
- package/dist/esm/internal/ExecutionSnapshotRelations.d.ts +1 -1
- package/dist/esm/internal/ExecutionSnapshotRelations.d.ts.map +1 -1
- package/dist/esm/internal/ExecutionSnapshotRelations.js.map +1 -1
- package/dist/esm/internal/RetentionOps.d.ts +2 -2
- package/dist/esm/internal/RetentionOps.d.ts.map +1 -1
- package/dist/esm/internal/RetentionOps.js +1 -1
- package/dist/esm/internal/RetentionOps.js.map +1 -1
- package/dist/esm/internal/RunCatalogOps.d.ts +1 -1
- package/dist/esm/internal/RunCatalogOps.d.ts.map +1 -1
- package/dist/esm/internal/RunCatalogOps.js +1 -1
- package/dist/esm/internal/RunCatalogOps.js.map +1 -1
- package/dist/esm/internal/RunListing.d.ts +1 -1
- package/dist/esm/internal/RunListing.d.ts.map +1 -1
- package/dist/esm/internal/RunListing.js +1 -1
- package/dist/esm/internal/RunListing.js.map +1 -1
- package/dist/esm/migrations/0001_initial.d.ts +1 -1
- package/dist/esm/migrations/0001_initial.d.ts.map +1 -1
- package/dist/esm/migrations/0001_initial.js +1 -1
- package/dist/esm/migrations/0001_initial.js.map +1 -1
- package/dist/esm/migrations/0002_selection_store.d.ts +1 -1
- package/dist/esm/migrations/0002_selection_store.d.ts.map +1 -1
- package/dist/esm/migrations/0002_selection_store.js +1 -1
- package/dist/esm/migrations/0002_selection_store.js.map +1 -1
- package/dist/esm/migrations/0003_plan_inputs.d.ts +1 -1
- package/dist/esm/migrations/0003_plan_inputs.d.ts.map +1 -1
- package/dist/esm/migrations/0003_plan_inputs.js +1 -1
- package/dist/esm/migrations/0003_plan_inputs.js.map +1 -1
- package/dist/esm/migrations/0004_plan_environment.d.ts +1 -1
- package/dist/esm/migrations/0004_plan_environment.d.ts.map +1 -1
- package/dist/esm/migrations/0004_plan_environment.js +1 -1
- package/dist/esm/migrations/0004_plan_environment.js.map +1 -1
- package/dist/esm/migrations/0005_plan_merges.d.ts +1 -1
- package/dist/esm/migrations/0005_plan_merges.d.ts.map +1 -1
- package/dist/esm/migrations/0005_plan_merges.js +1 -1
- package/dist/esm/migrations/0005_plan_merges.js.map +1 -1
- package/dist/esm/migrations/0006_execution_listing.d.ts +1 -1
- package/dist/esm/migrations/0006_execution_listing.d.ts.map +1 -1
- package/dist/esm/migrations/0006_execution_listing.js +1 -1
- package/dist/esm/migrations/0006_execution_listing.js.map +1 -1
- package/dist/esm/migrations/0007_run_parent_sequence.d.ts +1 -1
- package/dist/esm/migrations/0007_run_parent_sequence.d.ts.map +1 -1
- package/dist/esm/migrations/0007_run_parent_sequence.js +1 -1
- package/dist/esm/migrations/0007_run_parent_sequence.js.map +1 -1
- package/dist/esm/migrations/0008_deferred_consumption.d.ts +1 -1
- package/dist/esm/migrations/0008_deferred_consumption.d.ts.map +1 -1
- package/dist/esm/migrations/0008_deferred_consumption.js +1 -1
- package/dist/esm/migrations/0008_deferred_consumption.js.map +1 -1
- package/dist/esm/migrations/0009_deferred_clock_facts.d.ts +1 -1
- package/dist/esm/migrations/0009_deferred_clock_facts.d.ts.map +1 -1
- package/dist/esm/migrations/0009_deferred_clock_facts.js +1 -1
- package/dist/esm/migrations/0009_deferred_clock_facts.js.map +1 -1
- package/dist/esm/migrations/0010_pending_cancellation.d.ts +1 -1
- package/dist/esm/migrations/0010_pending_cancellation.d.ts.map +1 -1
- package/dist/esm/migrations/0010_pending_cancellation.js +1 -1
- package/dist/esm/migrations/0010_pending_cancellation.js.map +1 -1
- package/dist/esm/test/TestStores.d.ts +4 -4
- package/dist/esm/test/TestStores.d.ts.map +1 -1
- package/docs/api.md +19 -16
- package/package.json +22 -22
- package/src/ArtifactGc.ts +1 -1
- package/src/DeferredClockFold.ts +1 -1
- package/src/DisasterRecovery.ts +1 -1
- package/src/DurableEngineState.ts +1 -1
- package/src/ExecutionSnapshot.ts +1 -1
- package/src/OwnerIdentity.ts +1 -1
- package/src/PlanInputStore.ts +1 -1
- package/src/PlanMergeStore.ts +1 -1
- package/src/Retention.ts +2 -2
- package/src/RunChangeFeed.ts +1 -1
- package/src/SelectionStore.ts +1 -1
- package/src/StepBoundary.ts +32 -17
- package/src/StepCacheFold.ts +1 -1
- package/src/internal/EngineStateSchema.ts +1 -1
- package/src/internal/ExecutionSnapshotRead.ts +1 -1
- package/src/internal/ExecutionSnapshotRelations.ts +1 -1
- package/src/internal/RetentionOps.ts +2 -2
- package/src/internal/RunCatalogOps.ts +1 -1
- package/src/internal/RunListing.ts +1 -1
- package/src/migrations/0001_initial.ts +1 -1
- package/src/migrations/0002_selection_store.ts +1 -1
- package/src/migrations/0003_plan_inputs.ts +1 -1
- package/src/migrations/0004_plan_environment.ts +1 -1
- package/src/migrations/0005_plan_merges.ts +1 -1
- package/src/migrations/0006_execution_listing.ts +1 -1
- package/src/migrations/0007_run_parent_sequence.ts +1 -1
- package/src/migrations/0008_deferred_consumption.ts +1 -1
- package/src/migrations/0009_deferred_clock_facts.ts +1 -1
- package/src/migrations/0010_pending_cancellation.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunChangeFeed.js","sourceRoot":"","sources":["../../src/RunChangeFeed.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,KAAK,SAAS,MAAM
|
|
1
|
+
{"version":3,"file":"RunChangeFeed.js","sourceRoot":"","sources":["../../src/RunChangeFeed.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Coalesced execution catch-up with permanent deletion evidence.\n *\n * @since 1.0.0\n */\n\nimport { RunStoreError } from \"@smthrs/run-store/RunStore\"\nimport { Context, Effect, Layer, Schema } from \"effect\"\nimport * as SqlClient from \"effect/sql/SqlClient\"\nimport type { Position } from \"./ExecutionSnapshot.ts\"\nimport * as Read from \"./internal/ExecutionSnapshotRead.ts\"\n\n/**\n * A live-row change or retained tombstone.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Change extends Position {\n readonly runId: string\n readonly deleted: boolean\n}\n/**\n * One catch-up page at an engine watermark.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Page extends Position {\n readonly changes: ReadonlyArray<Change>\n /** Resume here, including across gaps from coalesced changes. */\n readonly nextRevision: number\n readonly hasMore: boolean\n}\n/**\n * Bounded state-feed operations.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Service {\n readonly current: Effect.Effect<Position, RunStoreError>\n readonly changesSince: (options: Position & { readonly limit: number }) => Effect.Effect<Page, RunStoreError>\n}\n/**\n * Durable change-feed service.\n *\n * @category services\n * @since 1.0.0\n */\nexport class RunChangeFeed extends Context.Service<RunChangeFeed, Service>()(\"@smthrs/engine-store/RunChangeFeed\") {}\n/**\n * Maximum change-feed page size.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const maximumPageSize = 1000\nconst Options = Schema.Struct({\n source: Read.Source,\n revision: Read.Natural,\n limit: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: maximumPageSize }))\n})\nconst ChangeRow = Schema.Struct({ run_id: Read.Identifier, revision: Read.Natural, deleted: Schema.Literals([0, 1]) })\n\n/**\n * Constructs the feed without polling or retention timers.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const make = (): Effect.Effect<Service, never, SqlClient.SqlClient> =>\n Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n return {\n current: Read.boundary(\"RunChangeFeed.current\", Read.position(sql)),\n changesSince: (options) =>\n Read.boundary(\n \"RunChangeFeed.changesSince\",\n Effect.gen(function*() {\n const input = yield* Read.decode(Options, options)\n return yield* Read.transaction(\n sql,\n Effect.gen(function*() {\n const at = yield* Read.position(sql)\n if (input.source !== at.source || input.revision > at.revision) {\n return yield* Effect.fail(\n new RunStoreError({\n method: \"RunChangeFeed.changesSince\",\n code: \"invalid_run\",\n message: \"change cursor requires an explicit source rebuild\",\n cause: { requested: input, observed: at }\n })\n )\n }\n const rows = yield* sql`SELECT run_id, revision, deleted FROM flows_run_changes\n WHERE revision > ${input.revision} AND revision <= ${at.revision}\n ORDER BY revision LIMIT ${input.limit + 1}`\n const decoded = yield* Effect.forEach(rows, (row) => Read.decode(ChangeRow, row))\n const changes = decoded.slice(0, input.limit).map((row) => ({\n runId: row.run_id,\n source: at.source,\n revision: row.revision,\n deleted: row.deleted === 1\n }))\n const hasMore = decoded.length > input.limit\n return {\n ...at,\n changes,\n hasMore,\n nextRevision: hasMore ? changes[changes.length - 1]!.revision : at.revision\n }\n })\n )\n })\n )\n }\n })\n/**\n * Provides the SQL feed.\n *\n * @category layers\n * @since 1.0.0\n */\nexport const layer: Layer.Layer<RunChangeFeed, never, SqlClient.SqlClient> = Layer.effect(RunChangeFeed)(make())\n"]}
|
|
@@ -24,7 +24,7 @@ import * as Context from "effect/Context";
|
|
|
24
24
|
import * as Effect from "effect/Effect";
|
|
25
25
|
import * as Layer from "effect/Layer";
|
|
26
26
|
import * as Schema from "effect/Schema";
|
|
27
|
-
import * as SqlClient from "effect/
|
|
27
|
+
import * as SqlClient from "effect/sql/SqlClient";
|
|
28
28
|
import * as Selection from "./Selection.ts";
|
|
29
29
|
/**
|
|
30
30
|
* Training outcomes for a suspected edge: a `hit` is a recertified deferral
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionStore.d.ts","sourceRoot":"","sources":["../../src/SelectionStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAE9D,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM
|
|
1
|
+
{"version":3,"file":"SelectionStore.d.ts","sourceRoot":"","sources":["../../src/SelectionStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAE9D,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,2CAAmC,CAAA;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;EAI9B,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,IAAI,CAAA;AAEjE;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,oFAIlC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,uBAAuB,CAAC,IAAI,CAAA;;;;;;;;AAEzE;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,wBASxC;CAAG;AAEJ;;;;;;;;;;GAUG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,CACf,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,KAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAA;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAC/F,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAA;IACrF,QAAQ,CAAC,KAAK,EAAE,CACd,YAAY,EAAE,aAAa,CAAC,mBAAmB,CAAC,KAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAA;CAC9C;;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,mBAEnC;CAAG;AA2FJ;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC,SAAS,CAoGlF,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC,SAAS,CAEnF,CAAA"}
|
|
@@ -25,7 +25,7 @@ import * as Context from "effect/Context";
|
|
|
25
25
|
import * as Effect from "effect/Effect";
|
|
26
26
|
import * as Layer from "effect/Layer";
|
|
27
27
|
import * as Schema from "effect/Schema";
|
|
28
|
-
import * as SqlClient from "effect/
|
|
28
|
+
import * as SqlClient from "effect/sql/SqlClient";
|
|
29
29
|
import * as Selection from "./Selection.js";
|
|
30
30
|
/**
|
|
31
31
|
* Training outcomes for a suspected edge: a `hit` is a recertified deferral
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionStore.js","sourceRoot":"","sources":["../../src/SelectionStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC1D,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AAU/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC,cAAc;IAC5B,OAAO,EAAE,MAAM,CAAC,cAAc;IAC9B,OAAO,EAAE,eAAe;CACzB,CAAC,CAAA;AAUF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,QAAQ,CAAC;IACrD,eAAe;IACf,eAAe;IACf,oBAAoB;CACrB,CAAC,CAAA;AAUF;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,WAAW,EAAuB,CAChF,0CAA0C,EAC1C;IACE,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;CACvC,CACF;CAAG;AAwBJ;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,OAAO,EAA2B,CAC5E,qCAAqC,CACtC;CAAG;AAEJ,MAAM,0BAA0B,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AAErF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC,cAAc;IAC5B,OAAO,EAAE,MAAM,CAAC,cAAc;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM;IACzB,WAAW,EAAE,SAAS,CAAC,kBAAkB;IACzC,YAAY,EAAE,MAAM,CAAC,MAAM;CAC5B,CAAC,CAAA;AAIF,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,KAAc,EAAuB,EAAE,CAC5E,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;AAEpE,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,KAAc,EAAuB,EAAE,CACjF,KAAK,YAAY,mBAAmB;IAClC,CAAC,CAAC,KAAK;IACP,CAAC,CAAC,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;AAE7E,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAA2D,EAAE,CACpG,MAAM,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CACzD,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC,CACrF,CAAA;AAEH,MAAM,UAAU,GAAG,CAAC,KAAc,EAA+D,EAAE,CACjG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAC7D,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC,CAC/E,CAAA;AAEH,6EAA6E;AAC7E,yEAAyE;AACzE,0EAA0E;AAC1E,MAAM,cAAc,GAAG,CAAC,QAA+B,EAAyB,EAAE,CAChF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AAE1C,MAAM,cAAc,GAAG,CACrB,YAAoB,EACpB,GAAuC,EACoB,EAAE,CAC7D,MAAM,CAAC,mBAAmB,CAAC,0BAA0B,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CACvE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,IAAI,mBAAmB,CAAC;IACtB,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,eAAe,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,OAAO,uBAAuB;IAC1E,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,KAAK;CACN,CAAC,CACH,CACF,CAAA;AAEH,MAAM,SAAS,GAAG,CAAC,KAAc,EAA+D,EAAE,CAChG,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,IAAI,mBAAmB,CAAC;IACtB,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,wCAAwC;IACjD,KAAK;CACN,CAAC,CACH,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC1B,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAClD,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,UAAU,EAAE,GAAG,CAAC,UAAU;IAC1B,WAAW,EAAE,GAAG,CAAC,WAAW;IAC5B,QAAQ;CACT,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAChC,IAAI,mBAAmB,CAAC;IACtB,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,eAAe,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,OAAO,aAAa;IAChE,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,KAAK;CACN,CAAC,CACH,CAAC,CACH,CACF,CACF,CACF,CAAA;AAEH,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAE,OAAwB,EAAU,EAAE,CAC/E,OAAO,KAAK,KAAK;IACf,CAAC,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;IACtC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAA;AAEtB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAA;AAErC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAuE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC1G,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IAEnC,MAAM,UAAU,GAAG,CAAC,WAAgC,EAAE,EAAE,CACtD,GAAG,CAAS;;;;;;;;sBAQM,WAAW,CAAC,KAAK;wBACf,WAAW,CAAC,OAAO;KACtC,CAAA;IAEH,MAAM,SAAS,GAAG,CAAC,IAA6B,EAA4C,EAAE,CAC5F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzD,KAAK,CAAC,CAAC,GAAG,CAAA;;;;YAIJ,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,KAAK,YAAY;;;;;OAK1F,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/B,iBAAiB,CACf,0BAA0B,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,OAAO,EAAE,EACzD,KAAK,CACN,CACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,MAAM,MAAM,GAAsB,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QACxD,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7E,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC,CAC1F,CAAA;IACH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,IAAI,GAAoB,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,CAClE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAS;;;;;;;;;OAS/B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;QAC9F,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC/C,CAAC,CAAC,CACH,CAAA;IAED,MAAM,QAAQ,GAAwB,MAAM,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,CAC9E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3B,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;IAC9B,CAAC,CAAC,CACH,CAAA;IAED,MAAM,KAAK,GAAqB,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CACjF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;QACtE,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAChC,OAAO,EACP,CAAC,WAAW,EAAE,EAAE,CACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,iBAAiB,CACf,uBAAuB,WAAW,CAAC,KAAK,OAAO,WAAW,CAAC,OAAO,EAAE,EACpE,KAAK,CACN,CACF,CACF,CAAA;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACnB,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAM;YAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YAClC,KAAK,CAAC,CAAC,SAAS,CAAC;gBACf,GAAG,IAAI;gBACP,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC;gBACjE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC;aACrF,CAAC,CAAA;QACJ,CAAC,CAAC,EACJ,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IAClG,CAAC,CAAC,CACH,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAA4E,KAAK,CAAC,MAAM,CACxG,cAAc,CACf,CAAC,IAAI,CAAC,CAAA","sourcesContent":["/**\n * Durable suspected-edge storage for probabilistic selection.\n *\n * The store persists advisory beliefs only: training moves edge confidence and\n * appends evidence, but it never writes scheduler journal records, step keys,\n * or cache rows (law 5). The edge and snapshot schemas are `Selection`'s own —\n * one source of truth, so a stored edge is by construction what\n * `Selection.select` consumes. Evidence entries stay strings: training appends\n * the observation JSON-encoded, so audits can replay the asymmetric rule\n * without the schema forking from `Selection.SuspectedEdge`.\n *\n * Model-backed selection, CLI verbs, approval routing, auto-appending\n * proposals, and scheduled recertification cadence are deliberately out of\n * scope here: `engine-store` must not grow a model dependency, no selection\n * CLI verbs are exposed yet, approval routing belongs to\n * `@smthrs/control`, proposal admission still needs human product review, and\n * cadence belongs to a system-flow/product layer rather than the primitive\n * store.\n *\n * @since 0.1.0\n */\n\nimport { DurableWriter } from \"@smthrs/database/DurableWriter\"\nimport * as Clock from \"effect/Clock\"\nimport * as Context from \"effect/Context\"\nimport * as Effect from \"effect/Effect\"\nimport * as Layer from \"effect/Layer\"\nimport * as Schema from \"effect/Schema\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\nimport * as Selection from \"./Selection.ts\"\n\n/**\n * Training outcomes for a suspected edge: a `hit` is a recertified deferral\n * that passed, a `miss` is one that failed — the guess was confidently wrong.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const TrainingOutcome = Schema.Literals([\"hit\", \"miss\"])\n\n/**\n * Training outcomes for a suspected edge.\n *\n * @category models\n * @since 0.1.0\n */\nexport type TrainingOutcome = typeof TrainingOutcome.Type\n\n/**\n * One observed result for a stored suspected edge.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const TrainingObservation = Schema.Struct({\n scope: Schema.NonEmptyString,\n affects: Schema.NonEmptyString,\n outcome: TrainingOutcome\n})\n\n/**\n * One observed result for a stored suspected edge.\n *\n * @category models\n * @since 0.1.0\n */\nexport type TrainingObservation = typeof TrainingObservation.Type\n\n/**\n * Stable selection-store failure codes.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const SelectionStoreErrorCode = Schema.Literals([\n \"invalid_input\",\n \"decode_failed\",\n \"persistence_failed\"\n])\n\n/**\n * Stable selection-store failure codes.\n *\n * @category models\n * @since 1.0.0\n */\nexport type SelectionStoreErrorCode = typeof SelectionStoreErrorCode.Type\n\n/**\n * A rejected public value, corrupt stored row, or unavailable database.\n *\n * @category errors\n * @since 1.0.0\n */\nexport class SelectionStoreError extends Schema.TaggedError<SelectionStoreError>()(\n \"@smthrs/engine-store/SelectionStoreError\",\n {\n code: SelectionStoreErrorCode,\n message: Schema.String,\n scope: Schema.optional(Schema.String),\n affects: Schema.optional(Schema.String),\n cause: Schema.optional(Schema.Unknown)\n }\n) {}\n\n/**\n * Durable suspected-edge persistence operations. `snapshot` pins the injected\n * clock's now, never `Date.now()`; `train` applies the asymmetric rule — a\n * hit gains five percent of the remaining headroom, a miss halves — to\n * matching stored edges only, ignoring unknown pairs rather than creating\n * them. Training retains at most {@link maxEvidenceEntries} newest evidence\n * entries per edge.\n *\n * @category models\n * @since 0.1.0\n */\nexport interface Service {\n readonly upsert: (\n edges: ReadonlyArray<Selection.SuspectedEdge>\n ) => Effect.Effect<void, SelectionStoreError>\n readonly list: () => Effect.Effect<ReadonlyArray<Selection.SuspectedEdge>, SelectionStoreError>\n readonly snapshot: () => Effect.Effect<Selection.BeliefSnapshot, SelectionStoreError>\n readonly train: (\n observations: ReadonlyArray<TrainingObservation>\n ) => Effect.Effect<void, SelectionStoreError>\n}\n\n/**\n * Service tag for the durable suspected-edge store.\n *\n * @category services\n * @since 0.1.0\n */\nexport class SelectionStore extends Context.Service<SelectionStore, Service>()(\n \"@smthrs/engine-store/SelectionStore\"\n) {}\n\nconst EvidenceListFromJsonString = Schema.fromJsonString(Schema.Array(Schema.String))\n\nconst EdgeRow = Schema.Struct({\n scope: Schema.NonEmptyString,\n affects: Schema.NonEmptyString,\n confidence: Schema.Number,\n validFromMs: Selection.NonNegativeSafeInt,\n evidenceJson: Schema.String\n})\n\ntype EdgeRow = typeof EdgeRow.Type\n\nconst invalidInput = (message: string, cause: unknown): SelectionStoreError =>\n new SelectionStoreError({ code: \"invalid_input\", message, cause })\n\nconst persistenceFailed = (message: string, cause: unknown): SelectionStoreError =>\n cause instanceof SelectionStoreError\n ? cause\n : new SelectionStoreError({ code: \"persistence_failed\", message, cause })\n\nconst decodeObservation = (input: unknown): Effect.Effect<TrainingObservation, SelectionStoreError> =>\n Schema.decodeUnknownEffect(TrainingObservation)(input).pipe(\n Effect.mapError((cause) => invalidInput(\"a training observation is invalid\", cause))\n )\n\nconst decodeEdge = (input: unknown): Effect.Effect<Selection.SuspectedEdge, SelectionStoreError> =>\n Schema.decodeUnknownEffect(Selection.SuspectedEdge)(input).pipe(\n Effect.mapError((cause) => invalidInput(\"a suspected edge is invalid\", cause))\n )\n\n// `decodeEdge` has already copied and validated this as an array of strings.\n// JSON encoding that closed value cannot fail, so retaining a fictitious\n// schema-error branch here only obscures the actual persistence failures.\nconst encodeEvidence = (evidence: ReadonlyArray<string>): Effect.Effect<string> =>\n Effect.succeed(JSON.stringify(evidence))\n\nconst decodeEvidence = (\n evidenceJson: string,\n row: Pick<EdgeRow, \"scope\" | \"affects\">\n): Effect.Effect<ReadonlyArray<string>, SelectionStoreError> =>\n Schema.decodeUnknownEffect(EvidenceListFromJsonString)(evidenceJson).pipe(\n Effect.mapError((cause) =>\n new SelectionStoreError({\n code: \"decode_failed\",\n message: `stored edge ${row.scope} -> ${row.affects} has invalid evidence`,\n scope: row.scope,\n affects: row.affects,\n cause\n })\n )\n )\n\nconst decodeRow = (input: unknown): Effect.Effect<Selection.SuspectedEdge, SelectionStoreError> =>\n Schema.decodeUnknownEffect(EdgeRow)(input).pipe(\n Effect.mapError((cause) =>\n new SelectionStoreError({\n code: \"decode_failed\",\n message: \"a stored selection edge row is invalid\",\n cause\n })\n ),\n Effect.flatMap((row) =>\n decodeEvidence(row.evidenceJson, row).pipe(\n Effect.flatMap((evidence) =>\n Schema.decodeUnknownEffect(Selection.SuspectedEdge)({\n scope: row.scope,\n affects: row.affects,\n confidence: row.confidence,\n validFromMs: row.validFromMs,\n evidence\n }).pipe(Effect.mapError((cause) =>\n new SelectionStoreError({\n code: \"decode_failed\",\n message: `stored edge ${row.scope} -> ${row.affects} is invalid`,\n scope: row.scope,\n affects: row.affects,\n cause\n })\n ))\n )\n )\n )\n )\n\nconst trainConfidence = (confidence: number, outcome: TrainingOutcome): number =>\n outcome === \"hit\"\n ? confidence + 0.05 * (1 - confidence)\n : confidence * 0.5\n\n/**\n * Maximum evidence entries retained for one suspected edge. Training drops\n * the oldest entries after this bound and preserves the newest entries in\n * observation order.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const maxEvidenceEntries = 128\n\n/**\n * Builds the SQL-backed suspected-edge store.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const make: Effect.Effect<Service, never, DurableWriter | SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n const writer = yield* DurableWriter\n\n const selectEdge = (observation: TrainingObservation) =>\n sql<EdgeRow>`\n SELECT\n scope,\n affects,\n confidence,\n valid_from_ms AS \"validFromMs\",\n evidence_json AS \"evidenceJson\"\n FROM flows_selection_suspected_edges\n WHERE scope = ${observation.scope}\n AND affects = ${observation.affects}\n `\n\n const writeEdge = (edge: Selection.SuspectedEdge): Effect.Effect<void, SelectionStoreError> =>\n Effect.gen(function*() {\n const evidenceJson = yield* encodeEvidence(edge.evidence)\n yield* sql`\n INSERT INTO flows_selection_suspected_edges (\n scope, affects, confidence, valid_from_ms, evidence_json\n ) VALUES (\n ${edge.scope}, ${edge.affects}, ${edge.confidence}, ${edge.validFromMs}, ${evidenceJson}\n ) ON CONFLICT (scope, affects) DO UPDATE SET\n confidence = excluded.confidence,\n valid_from_ms = excluded.valid_from_ms,\n evidence_json = excluded.evidence_json\n `.pipe(Effect.mapError((cause) =>\n persistenceFailed(\n `could not persist edge ${edge.scope} -> ${edge.affects}`,\n cause\n )\n ))\n })\n\n const upsert: Service[\"upsert\"] = Effect.fn(\"SelectionStore.upsert\")((edges) =>\n Effect.gen(function*() {\n const decoded = yield* Effect.forEach(edges, decodeEdge)\n yield* writer.write(Effect.forEach(decoded, writeEdge, { discard: true })).pipe(\n Effect.mapError((cause) => persistenceFailed(\"could not persist suspected edges\", cause))\n )\n })\n )\n\n const list: Service[\"list\"] = Effect.fn(\"SelectionStore.list\")(() =>\n Effect.gen(function*() {\n const rows = yield* sql<EdgeRow>`\n SELECT\n scope,\n affects,\n confidence,\n valid_from_ms AS \"validFromMs\",\n evidence_json AS \"evidenceJson\"\n FROM flows_selection_suspected_edges\n ORDER BY scope, affects\n `.pipe(Effect.mapError((cause) => persistenceFailed(\"could not list suspected edges\", cause)))\n return yield* Effect.forEach(rows, decodeRow)\n })\n )\n\n const snapshot: Service[\"snapshot\"] = Effect.fn(\"SelectionStore.snapshot\")(() =>\n Effect.gen(function*() {\n const pinnedAtMs = yield* Clock.currentTimeMillis.pipe(Effect.map(Math.floor))\n const edges = yield* list()\n return { pinnedAtMs, edges }\n })\n )\n\n const train: Service[\"train\"] = Effect.fn(\"SelectionStore.train\")((observations) =>\n Effect.gen(function*() {\n const decoded = yield* Effect.forEach(observations, decodeObservation)\n yield* writer.write(Effect.forEach(\n decoded,\n (observation) =>\n Effect.gen(function*() {\n const rows = yield* selectEdge(observation).pipe(\n Effect.mapError((cause) =>\n persistenceFailed(\n `could not read edge ${observation.scope} -> ${observation.affects}`,\n cause\n )\n )\n )\n const row = rows[0]\n if (row === undefined) return\n const edge = yield* decodeRow(row)\n yield* writeEdge({\n ...edge,\n confidence: trainConfidence(edge.confidence, observation.outcome),\n evidence: [...edge.evidence, JSON.stringify(observation)].slice(-maxEvidenceEntries)\n })\n }),\n { discard: true }\n )).pipe(Effect.mapError((cause) => persistenceFailed(\"could not train suspected edges\", cause)))\n })\n )\n\n return { upsert, list, snapshot, train }\n})\n\n/**\n * Provides the SQL-backed suspected-edge store.\n *\n * @category layers\n * @since 0.1.0\n */\nexport const layer: Layer.Layer<SelectionStore, never, DurableWriter | SqlClient.SqlClient> = Layer.effect(\n SelectionStore\n)(make)\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionStore.js","sourceRoot":"","sources":["../../src/SelectionStore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Durable suspected-edge storage for probabilistic selection.\n *\n * The store persists advisory beliefs only: training moves edge confidence and\n * appends evidence, but it never writes scheduler journal records, step keys,\n * or cache rows (law 5). The edge and snapshot schemas are `Selection`'s own —\n * one source of truth, so a stored edge is by construction what\n * `Selection.select` consumes. Evidence entries stay strings: training appends\n * the observation JSON-encoded, so audits can replay the asymmetric rule\n * without the schema forking from `Selection.SuspectedEdge`.\n *\n * Model-backed selection, CLI verbs, approval routing, auto-appending\n * proposals, and scheduled recertification cadence are deliberately out of\n * scope here: `engine-store` must not grow a model dependency, no selection\n * CLI verbs are exposed yet, approval routing belongs to\n * `@smthrs/control`, proposal admission still needs human product review, and\n * cadence belongs to a system-flow/product layer rather than the primitive\n * store.\n *\n * @since 0.1.0\n */\n\nimport { DurableWriter } from \"@smthrs/database/DurableWriter\"\nimport * as Clock from \"effect/Clock\"\nimport * as Context from \"effect/Context\"\nimport * as Effect from \"effect/Effect\"\nimport * as Layer from \"effect/Layer\"\nimport * as Schema from \"effect/Schema\"\nimport * as SqlClient from \"effect/sql/SqlClient\"\nimport * as Selection from \"./Selection.ts\"\n\n/**\n * Training outcomes for a suspected edge: a `hit` is a recertified deferral\n * that passed, a `miss` is one that failed — the guess was confidently wrong.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const TrainingOutcome = Schema.Literals([\"hit\", \"miss\"])\n\n/**\n * Training outcomes for a suspected edge.\n *\n * @category models\n * @since 0.1.0\n */\nexport type TrainingOutcome = typeof TrainingOutcome.Type\n\n/**\n * One observed result for a stored suspected edge.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const TrainingObservation = Schema.Struct({\n scope: Schema.NonEmptyString,\n affects: Schema.NonEmptyString,\n outcome: TrainingOutcome\n})\n\n/**\n * One observed result for a stored suspected edge.\n *\n * @category models\n * @since 0.1.0\n */\nexport type TrainingObservation = typeof TrainingObservation.Type\n\n/**\n * Stable selection-store failure codes.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const SelectionStoreErrorCode = Schema.Literals([\n \"invalid_input\",\n \"decode_failed\",\n \"persistence_failed\"\n])\n\n/**\n * Stable selection-store failure codes.\n *\n * @category models\n * @since 1.0.0\n */\nexport type SelectionStoreErrorCode = typeof SelectionStoreErrorCode.Type\n\n/**\n * A rejected public value, corrupt stored row, or unavailable database.\n *\n * @category errors\n * @since 1.0.0\n */\nexport class SelectionStoreError extends Schema.TaggedError<SelectionStoreError>()(\n \"@smthrs/engine-store/SelectionStoreError\",\n {\n code: SelectionStoreErrorCode,\n message: Schema.String,\n scope: Schema.optional(Schema.String),\n affects: Schema.optional(Schema.String),\n cause: Schema.optional(Schema.Unknown)\n }\n) {}\n\n/**\n * Durable suspected-edge persistence operations. `snapshot` pins the injected\n * clock's now, never `Date.now()`; `train` applies the asymmetric rule — a\n * hit gains five percent of the remaining headroom, a miss halves — to\n * matching stored edges only, ignoring unknown pairs rather than creating\n * them. Training retains at most {@link maxEvidenceEntries} newest evidence\n * entries per edge.\n *\n * @category models\n * @since 0.1.0\n */\nexport interface Service {\n readonly upsert: (\n edges: ReadonlyArray<Selection.SuspectedEdge>\n ) => Effect.Effect<void, SelectionStoreError>\n readonly list: () => Effect.Effect<ReadonlyArray<Selection.SuspectedEdge>, SelectionStoreError>\n readonly snapshot: () => Effect.Effect<Selection.BeliefSnapshot, SelectionStoreError>\n readonly train: (\n observations: ReadonlyArray<TrainingObservation>\n ) => Effect.Effect<void, SelectionStoreError>\n}\n\n/**\n * Service tag for the durable suspected-edge store.\n *\n * @category services\n * @since 0.1.0\n */\nexport class SelectionStore extends Context.Service<SelectionStore, Service>()(\n \"@smthrs/engine-store/SelectionStore\"\n) {}\n\nconst EvidenceListFromJsonString = Schema.fromJsonString(Schema.Array(Schema.String))\n\nconst EdgeRow = Schema.Struct({\n scope: Schema.NonEmptyString,\n affects: Schema.NonEmptyString,\n confidence: Schema.Number,\n validFromMs: Selection.NonNegativeSafeInt,\n evidenceJson: Schema.String\n})\n\ntype EdgeRow = typeof EdgeRow.Type\n\nconst invalidInput = (message: string, cause: unknown): SelectionStoreError =>\n new SelectionStoreError({ code: \"invalid_input\", message, cause })\n\nconst persistenceFailed = (message: string, cause: unknown): SelectionStoreError =>\n cause instanceof SelectionStoreError\n ? cause\n : new SelectionStoreError({ code: \"persistence_failed\", message, cause })\n\nconst decodeObservation = (input: unknown): Effect.Effect<TrainingObservation, SelectionStoreError> =>\n Schema.decodeUnknownEffect(TrainingObservation)(input).pipe(\n Effect.mapError((cause) => invalidInput(\"a training observation is invalid\", cause))\n )\n\nconst decodeEdge = (input: unknown): Effect.Effect<Selection.SuspectedEdge, SelectionStoreError> =>\n Schema.decodeUnknownEffect(Selection.SuspectedEdge)(input).pipe(\n Effect.mapError((cause) => invalidInput(\"a suspected edge is invalid\", cause))\n )\n\n// `decodeEdge` has already copied and validated this as an array of strings.\n// JSON encoding that closed value cannot fail, so retaining a fictitious\n// schema-error branch here only obscures the actual persistence failures.\nconst encodeEvidence = (evidence: ReadonlyArray<string>): Effect.Effect<string> =>\n Effect.succeed(JSON.stringify(evidence))\n\nconst decodeEvidence = (\n evidenceJson: string,\n row: Pick<EdgeRow, \"scope\" | \"affects\">\n): Effect.Effect<ReadonlyArray<string>, SelectionStoreError> =>\n Schema.decodeUnknownEffect(EvidenceListFromJsonString)(evidenceJson).pipe(\n Effect.mapError((cause) =>\n new SelectionStoreError({\n code: \"decode_failed\",\n message: `stored edge ${row.scope} -> ${row.affects} has invalid evidence`,\n scope: row.scope,\n affects: row.affects,\n cause\n })\n )\n )\n\nconst decodeRow = (input: unknown): Effect.Effect<Selection.SuspectedEdge, SelectionStoreError> =>\n Schema.decodeUnknownEffect(EdgeRow)(input).pipe(\n Effect.mapError((cause) =>\n new SelectionStoreError({\n code: \"decode_failed\",\n message: \"a stored selection edge row is invalid\",\n cause\n })\n ),\n Effect.flatMap((row) =>\n decodeEvidence(row.evidenceJson, row).pipe(\n Effect.flatMap((evidence) =>\n Schema.decodeUnknownEffect(Selection.SuspectedEdge)({\n scope: row.scope,\n affects: row.affects,\n confidence: row.confidence,\n validFromMs: row.validFromMs,\n evidence\n }).pipe(Effect.mapError((cause) =>\n new SelectionStoreError({\n code: \"decode_failed\",\n message: `stored edge ${row.scope} -> ${row.affects} is invalid`,\n scope: row.scope,\n affects: row.affects,\n cause\n })\n ))\n )\n )\n )\n )\n\nconst trainConfidence = (confidence: number, outcome: TrainingOutcome): number =>\n outcome === \"hit\"\n ? confidence + 0.05 * (1 - confidence)\n : confidence * 0.5\n\n/**\n * Maximum evidence entries retained for one suspected edge. Training drops\n * the oldest entries after this bound and preserves the newest entries in\n * observation order.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const maxEvidenceEntries = 128\n\n/**\n * Builds the SQL-backed suspected-edge store.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const make: Effect.Effect<Service, never, DurableWriter | SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n const writer = yield* DurableWriter\n\n const selectEdge = (observation: TrainingObservation) =>\n sql<EdgeRow>`\n SELECT\n scope,\n affects,\n confidence,\n valid_from_ms AS \"validFromMs\",\n evidence_json AS \"evidenceJson\"\n FROM flows_selection_suspected_edges\n WHERE scope = ${observation.scope}\n AND affects = ${observation.affects}\n `\n\n const writeEdge = (edge: Selection.SuspectedEdge): Effect.Effect<void, SelectionStoreError> =>\n Effect.gen(function*() {\n const evidenceJson = yield* encodeEvidence(edge.evidence)\n yield* sql`\n INSERT INTO flows_selection_suspected_edges (\n scope, affects, confidence, valid_from_ms, evidence_json\n ) VALUES (\n ${edge.scope}, ${edge.affects}, ${edge.confidence}, ${edge.validFromMs}, ${evidenceJson}\n ) ON CONFLICT (scope, affects) DO UPDATE SET\n confidence = excluded.confidence,\n valid_from_ms = excluded.valid_from_ms,\n evidence_json = excluded.evidence_json\n `.pipe(Effect.mapError((cause) =>\n persistenceFailed(\n `could not persist edge ${edge.scope} -> ${edge.affects}`,\n cause\n )\n ))\n })\n\n const upsert: Service[\"upsert\"] = Effect.fn(\"SelectionStore.upsert\")((edges) =>\n Effect.gen(function*() {\n const decoded = yield* Effect.forEach(edges, decodeEdge)\n yield* writer.write(Effect.forEach(decoded, writeEdge, { discard: true })).pipe(\n Effect.mapError((cause) => persistenceFailed(\"could not persist suspected edges\", cause))\n )\n })\n )\n\n const list: Service[\"list\"] = Effect.fn(\"SelectionStore.list\")(() =>\n Effect.gen(function*() {\n const rows = yield* sql<EdgeRow>`\n SELECT\n scope,\n affects,\n confidence,\n valid_from_ms AS \"validFromMs\",\n evidence_json AS \"evidenceJson\"\n FROM flows_selection_suspected_edges\n ORDER BY scope, affects\n `.pipe(Effect.mapError((cause) => persistenceFailed(\"could not list suspected edges\", cause)))\n return yield* Effect.forEach(rows, decodeRow)\n })\n )\n\n const snapshot: Service[\"snapshot\"] = Effect.fn(\"SelectionStore.snapshot\")(() =>\n Effect.gen(function*() {\n const pinnedAtMs = yield* Clock.currentTimeMillis.pipe(Effect.map(Math.floor))\n const edges = yield* list()\n return { pinnedAtMs, edges }\n })\n )\n\n const train: Service[\"train\"] = Effect.fn(\"SelectionStore.train\")((observations) =>\n Effect.gen(function*() {\n const decoded = yield* Effect.forEach(observations, decodeObservation)\n yield* writer.write(Effect.forEach(\n decoded,\n (observation) =>\n Effect.gen(function*() {\n const rows = yield* selectEdge(observation).pipe(\n Effect.mapError((cause) =>\n persistenceFailed(\n `could not read edge ${observation.scope} -> ${observation.affects}`,\n cause\n )\n )\n )\n const row = rows[0]\n if (row === undefined) return\n const edge = yield* decodeRow(row)\n yield* writeEdge({\n ...edge,\n confidence: trainConfidence(edge.confidence, observation.outcome),\n evidence: [...edge.evidence, JSON.stringify(observation)].slice(-maxEvidenceEntries)\n })\n }),\n { discard: true }\n )).pipe(Effect.mapError((cause) => persistenceFailed(\"could not train suspected edges\", cause)))\n })\n )\n\n return { upsert, list, snapshot, train }\n})\n\n/**\n * Provides the SQL-backed suspected-edge store.\n *\n * @category layers\n * @since 0.1.0\n */\nexport const layer: Layer.Layer<SelectionStore, never, DurableWriter | SqlClient.SqlClient> = Layer.effect(\n SelectionStore\n)(make)\n"]}
|
|
@@ -385,12 +385,14 @@ export interface FileSystemOptions {
|
|
|
385
385
|
*/
|
|
386
386
|
readonly maxTotalInlineBytes?: number | undefined;
|
|
387
387
|
/**
|
|
388
|
-
* The workspace root
|
|
389
|
-
*
|
|
390
|
-
*
|
|
391
|
-
*
|
|
392
|
-
*
|
|
393
|
-
*
|
|
388
|
+
* The workspace root every declared path resolves against: `prepare` and
|
|
389
|
+
* `settle` measure under it, and cache replay confines its writes, removals,
|
|
390
|
+
* and prune walk to it. A filesystem already confined to a root (the
|
|
391
|
+
* kernel-guarded layer's service, or a `confined` view) keeps its own root
|
|
392
|
+
* and ignores this. Otherwise it defaults to the process working directory,
|
|
393
|
+
* the root a path-based host resolves a relative path against. {@link layer}
|
|
394
|
+
* passes the kernel `Workspace` root when one is in context, which is the
|
|
395
|
+
* root a step's own FileSystem resolves against (issue #3911).
|
|
394
396
|
*/
|
|
395
397
|
readonly root?: string | undefined;
|
|
396
398
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepBoundary.d.ts","sourceRoot":"","sources":["../../src/StepBoundary.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"StepBoundary.d.ts","sourceRoot":"","sources":["../../src/StepBoundary.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/StepBoundary.js
CHANGED
|
@@ -14,7 +14,7 @@ import { DerivedKey } from "@smthrs/keys";
|
|
|
14
14
|
import * as FileSet from "@smthrs/plan/FileSet";
|
|
15
15
|
import * as Context from "effect/Context";
|
|
16
16
|
import * as Effect from "effect/Effect";
|
|
17
|
-
import * as
|
|
17
|
+
import * as Base64 from "effect/encoding/Base64";
|
|
18
18
|
import * as FileSystem from "effect/FileSystem";
|
|
19
19
|
import * as Layer from "effect/Layer";
|
|
20
20
|
import * as Path from "effect/Path";
|
|
@@ -421,7 +421,16 @@ export const makeFileSystem = (fs, platformPath, artifacts, options = {}) => {
|
|
|
421
421
|
const digest = yield* Schema.decodeUnknownEffect(Sha256)(bytes).pipe(Effect.orDie);
|
|
422
422
|
return { digest, bytes };
|
|
423
423
|
});
|
|
424
|
-
|
|
424
|
+
// Declared paths are workspace-relative. A confined filesystem resolves them
|
|
425
|
+
// against its own root, but a path-based host resolves them against the
|
|
426
|
+
// process working directory, where a same-named file would answer the dirty
|
|
427
|
+
// check and let a stale declaration serve a cache hit (issue #3911). Such a
|
|
428
|
+
// host is handed each path resolved against the configured root; results
|
|
429
|
+
// stay keyed by the declared path.
|
|
430
|
+
const readRoot = KernelFileSystem.confinedRoot(fs) === undefined ? options.root : undefined;
|
|
431
|
+
const hostPath = (path) => readRoot === undefined ? path : platformPath.resolve(readRoot, path);
|
|
432
|
+
const enumeration = readRoot === undefined ? {} : { resolve: hostPath };
|
|
433
|
+
const readDigest = (path) => readDigestFrom(fs, hostPath(path));
|
|
425
434
|
const batch = KernelFileSystem.batch(fs);
|
|
426
435
|
const measurements = Effect.fn("StepBoundary.measurements")(function* (paths, content) {
|
|
427
436
|
if (batch === undefined) {
|
|
@@ -435,7 +444,7 @@ export const makeFileSystem = (fs, platformPath, artifacts, options = {}) => {
|
|
|
435
444
|
for (let offset = 0; offset < paths.length; offset += batch.maxSize) {
|
|
436
445
|
const response = yield* batch.execute(paths.slice(offset, offset + batch.maxSize).map((path) => ({
|
|
437
446
|
operation: "digest",
|
|
438
|
-
path,
|
|
447
|
+
path: hostPath(path),
|
|
439
448
|
content
|
|
440
449
|
}))).pipe(Effect.mapError(hostFailure));
|
|
441
450
|
for (const entry of [...response.entries].sort((a, b) => a.index - b.index)) {
|
|
@@ -467,10 +476,10 @@ export const makeFileSystem = (fs, platformPath, artifacts, options = {}) => {
|
|
|
467
476
|
// workspace-relative expansion and let a tree replay delete dotfiles the
|
|
468
477
|
// producer wrote.
|
|
469
478
|
const expandGlob = Effect.fn("StepBoundary.expandGlob")(function* (glob) {
|
|
470
|
-
return yield* FileEnumeration.expandGlob(fs, glob).pipe(Effect.mapError(hostFailure));
|
|
479
|
+
return yield* FileEnumeration.expandGlob(fs, glob, enumeration).pipe(Effect.mapError(hostFailure));
|
|
471
480
|
});
|
|
472
|
-
const treeEntries = Effect.fn("StepBoundary.treeEntries")(function* (host, path) {
|
|
473
|
-
return yield* FileEnumeration.entriesUnder(host, path).pipe(Effect.mapError(hostFailure));
|
|
481
|
+
const treeEntries = Effect.fn("StepBoundary.treeEntries")(function* (host, path, resolution) {
|
|
482
|
+
return yield* FileEnumeration.entriesUnder(host, path, resolution).pipe(Effect.mapError(hostFailure));
|
|
474
483
|
});
|
|
475
484
|
// Replay writes and deletes what evidence names, so the lexical check alone
|
|
476
485
|
// is not a boundary: a symlink planted on a lexically valid path would carry
|
|
@@ -478,7 +487,7 @@ export const makeFileSystem = (fs, platformPath, artifacts, options = {}) => {
|
|
|
478
487
|
// its prune walk go through a view pinned to the root, where each call is
|
|
479
488
|
// one descriptor-relative, no-follow request and a symlink anywhere on the
|
|
480
489
|
// path is refused rather than followed. `prepare` and `settle` only read,
|
|
481
|
-
// and keep the caller's filesystem
|
|
490
|
+
// and keep the caller's filesystem, rooted through `hostPath`.
|
|
482
491
|
const replayRoot = KernelFileSystem.confinedRoot(fs) ?? options.root ?? ".";
|
|
483
492
|
const replayHost = KernelFileSystem.isConfinable(fs)
|
|
484
493
|
? KernelFileSystem.confined(fs, replayRoot).pipe(Effect.provideService(Path.Path, platformPath), Effect.mapError(hostFailure))
|
|
@@ -505,7 +514,7 @@ export const makeFileSystem = (fs, platformPath, artifacts, options = {}) => {
|
|
|
505
514
|
path,
|
|
506
515
|
digest,
|
|
507
516
|
sizeBytes: bytes.length,
|
|
508
|
-
content:
|
|
517
|
+
content: Base64.encode(bytes)
|
|
509
518
|
},
|
|
510
519
|
inlinedBytes: bytes.length
|
|
511
520
|
};
|
|
@@ -537,7 +546,7 @@ export const makeFileSystem = (fs, platformPath, artifacts, options = {}) => {
|
|
|
537
546
|
return;
|
|
538
547
|
let bytes;
|
|
539
548
|
if (output.content !== undefined) {
|
|
540
|
-
const decoded =
|
|
549
|
+
const decoded = Base64.decode(output.content);
|
|
541
550
|
if (Result.isFailure(decoded)) {
|
|
542
551
|
// Inline content is cache-origin bytes: an undecodable payload is a
|
|
543
552
|
// tampered durable row, classified exactly like a digest mismatch so
|
|
@@ -659,7 +668,7 @@ export const makeFileSystem = (fs, platformPath, artifacts, options = {}) => {
|
|
|
659
668
|
else if (entry._tag === "Glob")
|
|
660
669
|
outputPaths.push(...yield* expandGlob(entry));
|
|
661
670
|
else {
|
|
662
|
-
const files = (yield* treeEntries(fs, entry.path)).files;
|
|
671
|
+
const files = (yield* treeEntries(fs, entry.path, enumeration)).files;
|
|
663
672
|
outputPaths.push(...files);
|
|
664
673
|
treeMembers.push({ path: entry.path, files });
|
|
665
674
|
}
|
|
@@ -802,7 +811,7 @@ export const makeFileSystem = (fs, platformPath, artifacts, options = {}) => {
|
|
|
802
811
|
const recorded = new Set(decoded.success.outputs
|
|
803
812
|
.map((output) => output.path)
|
|
804
813
|
.filter((path) => path.startsWith(prefix)));
|
|
805
|
-
const entries = yield* treeEntries(host, tree.path);
|
|
814
|
+
const entries = yield* treeEntries(host, tree.path, {});
|
|
806
815
|
for (const path of entries.files) {
|
|
807
816
|
if (!recorded.has(path))
|
|
808
817
|
yield* host.remove(path).pipe(Effect.mapError(hostFailure));
|