hikoutei 0.3.0 → 0.3.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/README.ja.md +13 -21
- package/README.ko.md +14 -22
- package/README.md +25 -29
- package/dist/adapter/persistence/contracts/sql.d.ts +16 -2
- package/dist/adapter/persistence/contracts/sql.d.ts.map +1 -1
- package/dist/adapter/persistence/contracts/sql.js +11 -1
- package/dist/adapter/persistence/contracts/sql.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.d.ts +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.js +40 -14
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmScalarPersistenceProvider.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts +2 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js +23 -8
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts +13 -4
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js +12 -2
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.d.ts +21 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.js +59 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarEntityRuntime.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.d.ts +14 -13
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js +43 -64
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmScalarRuntime.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js +4 -2
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +1 -2
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts +61 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js +186 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts +56 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js +275 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts +11 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js +345 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.d.ts +65 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js +51 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingSql.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingState.d.ts +36 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingState.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingState.js +126 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingState.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts +11 -2
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts.map +1 -1
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js +39 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +46 -35
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +22 -4
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts +2 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +47 -54
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js +6 -30
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +79 -22
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts +2 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts +5 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +19 -4
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js +5 -6
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts +2 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js +2 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts +2 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +15 -19
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +44 -30
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -1
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.d.ts +3 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.js +10 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/validation.js.map +1 -0
- package/dist/api/Hikoutei.d.ts +17 -50
- package/dist/api/Hikoutei.d.ts.map +1 -1
- package/dist/api/Hikoutei.js +46 -105
- package/dist/api/Hikoutei.js.map +1 -1
- package/dist/api/entity.d.ts +9 -10
- package/dist/api/entity.d.ts.map +1 -1
- package/dist/api/entity.js +20 -26
- package/dist/api/entity.js.map +1 -1
- package/dist/api/errors.d.ts +0 -6
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +0 -6
- package/dist/api/errors.js.map +1 -1
- package/dist/api/index.d.ts +4 -4
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/internalEntityManager.d.ts.map +1 -1
- package/dist/api/internalEntityManager.js +33 -19
- package/dist/api/internalEntityManager.js.map +1 -1
- package/dist/application/orm/mapping/contracts.d.ts +16 -6
- package/dist/application/orm/mapping/contracts.d.ts.map +1 -1
- package/dist/application/orm/mapping/definition.d.ts.map +1 -1
- package/dist/application/orm/mapping/definition.js +47 -8
- package/dist/application/orm/mapping/definition.js.map +1 -1
- package/dist/application/orm/mapping/identity.js +1 -1
- package/dist/application/orm/mapping/identity.js.map +1 -1
- package/dist/application/orm/mapping/projection.d.ts.map +1 -1
- package/dist/application/orm/mapping/projection.js +10 -2
- package/dist/application/orm/mapping/projection.js.map +1 -1
- package/dist/application/orm/mapping/values.d.ts.map +1 -1
- package/dist/application/orm/mapping/values.js +5 -35
- package/dist/application/orm/mapping/values.js.map +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts +3 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -1
- package/dist/application/orm/persistence/flush/flushCoordinator.js +4 -3
- package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -1
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +2 -1
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -1
- package/dist/application/orm/persistence/projection/projectionEffects.d.ts +3 -1
- package/dist/application/orm/persistence/projection/projectionEffects.d.ts.map +1 -1
- package/dist/application/orm/persistence/projection/projectionEffects.js +14 -16
- package/dist/application/orm/persistence/projection/projectionEffects.js.map +1 -1
- package/dist/application/orm/persistence/scalar/unitOfWork.d.ts +6 -6
- package/dist/application/orm/persistence/scalar/unitOfWork.d.ts.map +1 -1
- package/dist/application/orm/persistence/scalar/unitOfWork.js +28 -28
- package/dist/application/orm/persistence/scalar/unitOfWork.js.map +1 -1
- package/dist/application/orm/persistence/support/businessKeys.d.ts.map +1 -1
- package/dist/application/orm/persistence/support/businessKeys.js +6 -24
- package/dist/application/orm/persistence/support/businessKeys.js.map +1 -1
- package/dist/application/orm/persistence/support/canonicalState.d.ts.map +1 -1
- package/dist/application/orm/persistence/support/canonicalState.js +9 -25
- package/dist/application/orm/persistence/support/canonicalState.js.map +1 -1
- package/dist/application/orm/persistence/support/contracts.d.ts +0 -57
- package/dist/application/orm/persistence/support/contracts.d.ts.map +1 -1
- package/dist/application/orm/persistence/support/contracts.js +0 -68
- package/dist/application/orm/persistence/support/contracts.js.map +1 -1
- package/dist/application/orm/persistence/support/helpers.d.ts +1 -11
- package/dist/application/orm/persistence/support/helpers.d.ts.map +1 -1
- package/dist/application/orm/persistence/support/helpers.js +1 -21
- package/dist/application/orm/persistence/support/helpers.js.map +1 -1
- package/dist/application/sync/gateway/constants.d.ts +2 -1
- package/dist/application/sync/gateway/constants.d.ts.map +1 -1
- package/dist/application/sync/gateway/constants.js +4 -3
- package/dist/application/sync/gateway/constants.js.map +1 -1
- package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -1
- package/dist/application/sync/gateway/syncGateway.js +9 -28
- package/dist/application/sync/gateway/syncGateway.js.map +1 -1
- package/dist/application/sync/gateway/validation.d.ts +5 -0
- package/dist/application/sync/gateway/validation.d.ts.map +1 -1
- package/dist/application/sync/gateway/validation.js +22 -3
- package/dist/application/sync/gateway/validation.js.map +1 -1
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts.map +1 -1
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js +3 -23
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +2 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +24 -6
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js +35 -34
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +0 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +8 -37
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +2 -2
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts +0 -5
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js +3 -10
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +13 -21
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -1
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +15 -3
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -1
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts.map +1 -1
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js +1 -10
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +5 -9
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
- package/dist/application/sync/service/SyncPollingSupervisor.d.ts +45 -0
- package/dist/application/sync/service/SyncPollingSupervisor.d.ts.map +1 -0
- package/dist/application/sync/service/SyncPollingSupervisor.js +142 -0
- package/dist/application/sync/service/SyncPollingSupervisor.js.map +1 -0
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts +63 -0
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -0
- package/dist/application/sync/service/SyncServiceBootstrap.js +223 -0
- package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -0
- package/dist/application/sync/service/contracts.d.ts +25 -0
- package/dist/application/sync/service/contracts.d.ts.map +1 -0
- package/dist/application/sync/service/contracts.js +3 -0
- package/dist/application/sync/service/contracts.js.map +1 -0
- package/dist/application/sync/service/errors.d.ts +15 -0
- package/dist/application/sync/service/errors.d.ts.map +1 -0
- package/dist/application/sync/service/errors.js +16 -0
- package/dist/application/sync/service/errors.js.map +1 -0
- package/dist/domain/errors/types.d.ts +1 -1
- package/dist/domain/errors/types.d.ts.map +1 -1
- package/dist/domain/errors/types.js +2 -2
- package/dist/domain/errors/types.js.map +1 -1
- package/dist/domain/evaluate/constants.d.ts +1 -1
- package/dist/domain/evaluate/constants.d.ts.map +1 -1
- package/dist/domain/evaluate/constants.js.map +1 -1
- package/dist/domain/evaluate/preconditions.d.ts.map +1 -1
- package/dist/domain/evaluate/preconditions.js +25 -32
- package/dist/domain/evaluate/preconditions.js.map +1 -1
- package/dist/domain/evaluate/quarantine.js +4 -1
- package/dist/domain/evaluate/quarantine.js.map +1 -1
- package/dist/domain/model/constants.d.ts +48 -0
- package/dist/domain/model/constants.d.ts.map +1 -1
- package/dist/domain/model/constants.js +38 -0
- package/dist/domain/model/constants.js.map +1 -1
- package/dist/domain/model/index.d.ts +2 -2
- package/dist/domain/model/index.d.ts.map +1 -1
- package/dist/domain/model/index.js +1 -1
- package/dist/domain/model/index.js.map +1 -1
- package/dist/domain/model/types.d.ts +13 -10
- package/dist/domain/model/types.d.ts.map +1 -1
- package/dist/infrastructure/storage/constants.d.ts +1 -1
- package/dist/infrastructure/storage/constants.d.ts.map +1 -1
- package/dist/infrastructure/storage/constants.js.map +1 -1
- package/dist/infrastructure/storage/errors.d.ts +2 -2
- package/dist/infrastructure/storage/errors.d.ts.map +1 -1
- package/dist/infrastructure/storage/errors.js +3 -5
- package/dist/infrastructure/storage/errors.js.map +1 -1
- package/dist/infrastructure/storage/index.d.ts +9 -5
- package/dist/infrastructure/storage/index.d.ts.map +1 -1
- package/dist/infrastructure/storage/index.js +3 -1
- package/dist/infrastructure/storage/index.js.map +1 -1
- package/dist/infrastructure/storage/sqlite/migrateSchema.js +9 -4
- package/dist/infrastructure/storage/sqlite/migrateSchema.js.map +1 -1
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts +9 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +35 -36
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts +8 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js +14 -0
- package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.js +4 -1
- package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts +11 -1
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationCanonical.js +108 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts +36 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js +55 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts +22 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationTypes.js +5 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationValidation.js +26 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.js.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts +1 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.js +5 -1
- package/dist/infrastructure/storage/state/observation/observationWriter.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +3 -2
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts +1 -5
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js +3 -43
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +2 -4
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +2 -2
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +20 -10
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +33 -18
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +2 -4
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +6 -2
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +157 -14
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.d.ts +1 -1
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js +14 -1
- package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js.map +1 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts +2 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js +4 -1
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js.map +1 -1
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts +4 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts.map +1 -1
- package/dist/infrastructure/storage/sync/shared/writerLease.js +9 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -1
- package/dist/shared/constants.d.ts +4 -4
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/encoding/index.d.ts +1 -0
- package/dist/shared/encoding/index.d.ts.map +1 -1
- package/dist/shared/encoding/index.js +1 -0
- package/dist/shared/encoding/index.js.map +1 -1
- package/dist/shared/encoding/normalizedCell.d.ts +4 -0
- package/dist/shared/encoding/normalizedCell.d.ts.map +1 -0
- package/dist/shared/encoding/normalizedCell.js +29 -0
- package/dist/shared/encoding/normalizedCell.js.map +1 -0
- package/dist/shared/encoding/stableEncode.d.ts +2 -1
- package/dist/shared/encoding/stableEncode.d.ts.map +1 -1
- package/dist/shared/encoding/stableEncode.js +6 -12
- package/dist/shared/encoding/stableEncode.js.map +1 -1
- package/dist/shared/identity/index.d.ts +3 -0
- package/dist/shared/identity/index.d.ts.map +1 -0
- package/dist/shared/identity/index.js +2 -0
- package/dist/shared/identity/index.js.map +1 -0
- package/dist/shared/identity/types.d.ts +41 -0
- package/dist/shared/identity/types.d.ts.map +1 -0
- package/dist/shared/identity/types.js +34 -0
- package/dist/shared/identity/types.js.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/state/constructors.d.ts +10 -0
- package/dist/shared/state/constructors.d.ts.map +1 -0
- package/dist/shared/state/constructors.js +18 -0
- package/dist/shared/state/constructors.js.map +1 -0
- package/dist/shared/state/index.d.ts +1 -0
- package/dist/shared/state/index.d.ts.map +1 -1
- package/dist/shared/state/index.js +1 -0
- package/dist/shared/state/index.js.map +1 -1
- package/dist/shared/validation.d.ts +2 -0
- package/dist/shared/validation.d.ts.map +1 -1
- package/dist/shared/validation.js +9 -0
- package/dist/shared/validation.js.map +1 -1
- package/docs/architecture.md +108 -103
- package/docs/ci.md +184 -61
- package/docs/mikro-orm-adapter-spike.md +55 -214
- package/docs/quick-start.md +58 -96
- package/docs/write-and-synchronization-flow.md +70 -39
- package/package.json +1 -1
package/docs/quick-start.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# Hikoutei Quick Start
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Hikoutei is a typed repository and safe write layer for Google Sheets-backed MVPs.
|
|
4
|
+
SQLite is the application authority; Google Sheets is an asynchronous internal
|
|
5
|
+
projection and human input surface.
|
|
5
6
|
|
|
6
7
|
## Installation
|
|
7
8
|
|
|
@@ -9,13 +10,11 @@ The project is called Hikoutei and is currently published on npm as
|
|
|
9
10
|
npm install hikoutei @mikro-orm/core @mikro-orm/sql
|
|
10
11
|
```
|
|
11
12
|
|
|
12
|
-
The root API does not expose MikroORM
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
The root API does not expose MikroORM, SQL, Apps Script, or sync-worker types.
|
|
14
|
+
The current built-in SQLite provider uses the optional MikroORM peer
|
|
15
|
+
dependencies internally.
|
|
15
16
|
|
|
16
|
-
## Define
|
|
17
|
-
|
|
18
|
-
Entity metadata and environment-specific Sheet routes are separate:
|
|
17
|
+
## Define an entity
|
|
19
18
|
|
|
20
19
|
```ts
|
|
21
20
|
import { createTypedSheets, defineTypedSheetsEntity } from "hikoutei";
|
|
@@ -33,26 +32,16 @@ const User = defineTypedSheetsEntity({
|
|
|
33
32
|
const hikoutei = await createTypedSheets({
|
|
34
33
|
dbName: "./hikoutei.sqlite",
|
|
35
34
|
entities: [User],
|
|
36
|
-
sheets: {
|
|
37
|
-
spreadsheetId: process.env.GOOGLE_SHEET_ID!,
|
|
38
|
-
routes: {
|
|
39
|
-
User: {
|
|
40
|
-
systemState: { tabName: "Users_System", registeredRange: "A:Z" },
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
35
|
});
|
|
45
36
|
```
|
|
46
37
|
|
|
47
|
-
`createTypedSheets()` validates
|
|
48
|
-
|
|
49
|
-
|
|
38
|
+
`createTypedSheets()` validates entity descriptors, opens the local SQLite
|
|
39
|
+
authority, and creates the declared entity tables. It does not contact Google
|
|
40
|
+
Sheets and accepts no Sheet route or gateway option.
|
|
50
41
|
|
|
51
42
|
## Entity lifecycle
|
|
52
43
|
|
|
53
|
-
Use a request-local manager. Reads come from SQLite, never from
|
|
54
|
-
The Unit of Work owns identity maps and snapshots, so mutation followed by
|
|
55
|
-
`flush()` has the same meaning regardless of the persistence provider.
|
|
44
|
+
Use a request-local manager. Reads come from SQLite, never from a remote Sheet.
|
|
56
45
|
|
|
57
46
|
```ts
|
|
58
47
|
const em = hikoutei.em.fork();
|
|
@@ -69,83 +58,56 @@ const loaded = await em.findOne(User, { id: "u1" });
|
|
|
69
58
|
if (loaded !== null) {
|
|
70
59
|
loaded.name = "Ada Lovelace";
|
|
71
60
|
await em.flush();
|
|
72
|
-
|
|
73
|
-
await em.transactional(async (transactionalEm) => {
|
|
74
|
-
transactionalEm.remove(loaded);
|
|
75
|
-
});
|
|
76
61
|
}
|
|
62
|
+
|
|
63
|
+
await em.transactional(async (transactionalEm) => {
|
|
64
|
+
const target = await transactionalEm.findOne(User, { id: "u1" });
|
|
65
|
+
if (target !== null) transactionalEm.remove(target);
|
|
66
|
+
});
|
|
77
67
|
```
|
|
78
68
|
|
|
79
|
-
The stable lifecycle methods are `fork()`, `create()`, `find()`, `
|
|
80
|
-
`remove()`, `flush()`, and `transactional()`. Relations and
|
|
81
|
-
query operators are not part of the scalar release.
|
|
82
|
-
|
|
83
|
-
## Sheet setup and delivery
|
|
84
|
-
|
|
85
|
-
`createTypedSheets()` opens the local SQLite authority and validates the
|
|
86
|
-
registered routes, but it does not contact Google Sheets. Provisioning is an
|
|
87
|
-
explicit service/deployment operation, and the included
|
|
88
|
-
[`apps-script/gateway/Code.gs`](../apps-script/gateway/Code.gs) must be deployed
|
|
89
|
-
before the server can deliver Sheet effects.
|
|
90
|
-
|
|
91
|
-
### Deploy the Apps Script gateway
|
|
92
|
-
|
|
93
|
-
Complete these steps once for the spreadsheet that the service will use:
|
|
94
|
-
|
|
95
|
-
1. Create or open the target Google Spreadsheet. From **Extensions → Apps
|
|
96
|
-
Script**, create a **bound** Apps Script project for that spreadsheet.
|
|
97
|
-
2. Copy the complete `apps-script/gateway/Code.gs` file from this repository or
|
|
98
|
-
from `node_modules/hikoutei/apps-script/gateway/Code.gs` into the Apps Script
|
|
99
|
-
editor, then save it.
|
|
100
|
-
3. Choose **Deploy → New deployment**, select **Web app**, and deploy it with
|
|
101
|
-
**Execute as: Me**. Choose the narrowest access audience that can reach the
|
|
102
|
-
server. A server outside the Workspace normally requires **Anyone**; the
|
|
103
|
-
signed request secret still authenticates every useful POST.
|
|
104
|
-
4. Copy the deployed URL ending in `/exec`. Do not use the editor-only `/dev`
|
|
105
|
-
URL. Paste the URL into the constant near the top of `Code.gs` and save:
|
|
106
|
-
|
|
107
|
-
```js
|
|
108
|
-
var TYPED_SHEETS_GATEWAY_URL =
|
|
109
|
-
"https://script.google.com/macros/s/DEPLOYMENT_ID/exec";
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
5. In the **bound** Apps Script editor, select `setupSyncGateway` in the
|
|
113
|
-
function menu and click **Run**. Approve the requested Google permissions.
|
|
114
|
-
The helper reads the active spreadsheet ID, stores the ID and shared secret
|
|
115
|
-
in Script Properties, and logs a copyable local environment block. Running
|
|
116
|
-
it from a standalone Apps Script project cannot identify the spreadsheet.
|
|
117
|
-
6. Open the execution log and copy the printed values into an untracked server
|
|
118
|
-
environment file or secret store:
|
|
119
|
-
|
|
120
|
-
```dotenv
|
|
121
|
-
TYPED_SHEETS_GATEWAY_URL="https://script.google.com/macros/s/DEPLOYMENT_ID/exec"
|
|
122
|
-
TYPED_SHEETS_GATEWAY_SHARED_SECRET="generated-secret"
|
|
123
|
-
TYPED_SHEETS_GATEWAY_SHEET_ID="spreadsheet-id"
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
The sheet ID is derived from the bound spreadsheet; it is not a second
|
|
127
|
-
spreadsheet to configure. Never put the shared secret in browser code or
|
|
128
|
-
commit it to Git.
|
|
129
|
-
7. If `Code.gs` changes, use **Deploy → Manage deployments**, edit the Web App
|
|
130
|
-
deployment, and create a new version before relying on the changed gateway.
|
|
131
|
-
The `/exec` URL stays the same when an existing deployment is updated.
|
|
132
|
-
|
|
133
|
-
### Provision and deliver Sheets
|
|
134
|
-
|
|
135
|
-
Provide a server-side, provider-neutral `HikouteiSheetProvisioner` using the
|
|
136
|
-
server credentials, then explicitly provision the registered tabs and headers:
|
|
69
|
+
The stable lifecycle methods are `fork()`, `create()`, `find()`, `findOne()`,
|
|
70
|
+
`persist()`, `remove()`, `flush()`, and `transactional()`. Relations and
|
|
71
|
+
provider-specific query operators are not part of the scalar release.
|
|
137
72
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
73
|
+
## Internal Sheet synchronization
|
|
74
|
+
|
|
75
|
+
Applications do not call Sheet APIs or choose a write operation for each
|
|
76
|
+
entity change. A service-side internal sync bootstrap owns:
|
|
77
|
+
|
|
78
|
+
- projection routes and user-owned field configuration
|
|
79
|
+
- Apps Script URL, spreadsheet ID, and shared secret
|
|
80
|
+
- local projection registration and remote provisioning
|
|
81
|
+
- the outbound effect supervisor and durable outbox delivery
|
|
82
|
+
- User_Input polling, evaluation, conflict handling, and reconciliation
|
|
83
|
+
|
|
84
|
+
When that internal service mode is active, `flush()` commits the entity table,
|
|
85
|
+
canonical sync state, and durable Sheet effect outbox in one SQLite transaction.
|
|
86
|
+
The call still does not wait for the remote Sheet write.
|
|
87
|
+
|
|
88
|
+
The internal service provisions and validates the registered tabs before it
|
|
89
|
+
starts delivery. Schema drift or gateway setup failure stops service startup
|
|
90
|
+
rather than silently changing a remote Sheet. These service modules are under
|
|
91
|
+
`src/application/sync/service/` and are intentionally not re-exported from the
|
|
92
|
+
package root.
|
|
93
|
+
|
|
94
|
+
## Apps Script gateway
|
|
95
|
+
|
|
96
|
+
The deployable gateway is [`apps-script/gateway/Code.gs`](../apps-script/gateway/Code.gs).
|
|
97
|
+
A service deployment supplies its URL and shared secret through a secret store
|
|
98
|
+
or environment configuration. Never place the shared secret in browser code or
|
|
99
|
+
commit it to Git.
|
|
100
|
+
|
|
101
|
+
Live Google integration is opt-in and requires a deployed gateway, credentials,
|
|
102
|
+
a spreadsheet, and external quota. The normal test suite uses fake gateways and
|
|
103
|
+
SQLite fixtures without credentials.
|
|
141
104
|
|
|
142
|
-
|
|
143
|
-
rewriting headers. After setup, run the sync worker that delivers pending
|
|
144
|
-
outbox effects. A successful `flush()` commits the entity table, canonical sync
|
|
145
|
-
state, and durable Sheet effect outbox in one SQLite transaction; it does not
|
|
146
|
-
mean that the remote Sheet has already been updated.
|
|
105
|
+
## Read/write guarantees
|
|
147
106
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
107
|
+
- SQLite is the source of truth for application reads.
|
|
108
|
+
- `flush()` returns after the local SQLite transaction commits.
|
|
109
|
+
- Sheet delivery is asynchronous and at-least-once.
|
|
110
|
+
- Stale or conflicting User_Input edits are recorded in SQLite rather than
|
|
111
|
+
silently overwriting canonical data.
|
|
112
|
+
- Gateway response loss is recoverable work, not proof of a failed remote write.
|
|
113
|
+
- Projection route/header drift fails explicitly.
|
|
@@ -1,72 +1,103 @@
|
|
|
1
1
|
# Write and Synchronization Flow
|
|
2
2
|
|
|
3
3
|
Hikoutei commits local state first and materializes Google Sheets changes
|
|
4
|
-
asynchronously.
|
|
5
|
-
|
|
4
|
+
asynchronously. The root ORM API is SQLite-only; the internal sync service owns
|
|
5
|
+
all Sheet communication.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Public ORM flow
|
|
8
8
|
|
|
9
9
|
```text
|
|
10
10
|
em.persist(entity) / em.remove(entity)
|
|
11
11
|
│
|
|
12
12
|
▼
|
|
13
13
|
SQLite transaction
|
|
14
|
-
|
|
15
|
-
└─ durable outbox effect
|
|
14
|
+
└─ entity table
|
|
16
15
|
│
|
|
17
16
|
▼
|
|
18
|
-
|
|
17
|
+
return to application
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`createTypedSheets()` never contacts Google Sheets and does not require a Sheet
|
|
21
|
+
route, gateway client, or provisioner. Reads always come from SQLite.
|
|
22
|
+
|
|
23
|
+
## Internal sync service flow
|
|
24
|
+
|
|
25
|
+
The service-side bootstrap uses the same SQLite adapter and adds the canonical
|
|
26
|
+
sync state and durable outbox to the flush transaction:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
EntityManager.flush()
|
|
30
|
+
│
|
|
31
|
+
▼
|
|
32
|
+
SQLite transaction
|
|
33
|
+
├─ entity table
|
|
34
|
+
├─ canonical sync state
|
|
35
|
+
├─ projection registry/state
|
|
36
|
+
└─ durable Sheet effect outbox
|
|
37
|
+
│
|
|
38
|
+
▼
|
|
39
|
+
internal effect supervisor
|
|
19
40
|
├─ claim with a lease
|
|
20
41
|
├─ send a signed operation batch
|
|
21
42
|
├─ retry or recover an uncertain response
|
|
22
43
|
└─ mark the effect applied/failed
|
|
23
44
|
│
|
|
24
45
|
▼
|
|
25
|
-
Apps Script gateway
|
|
46
|
+
Apps Script gateway ──▶ Google Sheets
|
|
26
47
|
```
|
|
27
48
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
49
|
+
A successful `flush()` means that SQLite accepted the local change and queued
|
|
50
|
+
its projection effect. It does not mean that the remote Sheet write has
|
|
51
|
+
completed.
|
|
52
|
+
|
|
53
|
+
## Fast append, update, and delete
|
|
31
54
|
|
|
32
|
-
|
|
55
|
+
New System_State rows use the bounded fast append operation where possible.
|
|
56
|
+
Updates and deletes use guarded effects with expected visible revision/hash
|
|
57
|
+
evidence. The same internal worker handles retries, response-loss recovery, and
|
|
58
|
+
reconciliation. These operation types are implementation details and are not
|
|
59
|
+
methods on the public EntityManager.
|
|
33
60
|
|
|
34
|
-
|
|
35
|
-
doing expensive metadata, snapshot, postcondition, and repair work before every
|
|
36
|
-
append. Those checks belong to a separate safety path so the common write can
|
|
37
|
-
remain small and predictable.
|
|
61
|
+
## Inbound User_Input flow
|
|
38
62
|
|
|
39
|
-
|
|
63
|
+
The internal service polls registered `User_Input` projections on a bounded
|
|
64
|
+
interval. It reads the visible row, compares it with canonical SQLite state,
|
|
65
|
+
and sends changed fields through the evaluator:
|
|
40
66
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
67
|
+
```text
|
|
68
|
+
User_Input polling
|
|
69
|
+
├─ normalize literal/blank cells
|
|
70
|
+
├─ resolve business-key row binding
|
|
71
|
+
├─ validate ownership and field revisions
|
|
72
|
+
├─ classify accepted, conflict, stale, or quarantine
|
|
73
|
+
└─ persist accepted observation and entity mutation in SQLite
|
|
74
|
+
```
|
|
44
75
|
|
|
45
|
-
|
|
76
|
+
Accepted observation writes update canonical state and the application entity in
|
|
77
|
+
the same SQLite transaction. They do not enqueue a duplicate User_Input effect;
|
|
78
|
+
only the required system projection repair/materialization is considered.
|
|
79
|
+
Conflicts, stale writes, duplicate keys, and malformed cells remain visible in
|
|
80
|
+
SQLite evidence tables for later handling.
|
|
46
81
|
|
|
47
|
-
|
|
82
|
+
## Provisioning and gateway boundary
|
|
83
|
+
|
|
84
|
+
Projection provisioning is an internal service-start operation. The bootstrap
|
|
85
|
+
generates route registrations and headers from the internal mapping, verifies
|
|
86
|
+
remote schema drift, and starts workers only after provisioning succeeds. The
|
|
87
|
+
Apps Script gateway remains intentionally thin:
|
|
48
88
|
|
|
49
89
|
1. verify the signed operation envelope
|
|
50
90
|
2. validate the operation contract
|
|
51
91
|
3. execute the allowlisted Sheet operation
|
|
52
|
-
4. return a structured result to the
|
|
53
|
-
|
|
54
|
-
Entity evaluation, canonical state, retry policy, reconciliation, and effect
|
|
55
|
-
classification remain in the Node/SQLite side of Hikoutei.
|
|
56
|
-
|
|
57
|
-
## Uncertain remote results
|
|
58
|
-
|
|
59
|
-
An HTTP timeout or lost response does not prove that the Sheet write failed. The
|
|
60
|
-
worker treats that result as recoverable work, retries according to its policy,
|
|
61
|
-
and relies on idempotent effects and reconciliation to repair drift later.
|
|
92
|
+
4. return a structured result to the internal worker
|
|
62
93
|
|
|
63
|
-
|
|
64
|
-
|
|
94
|
+
Applications do not import or call the gateway client, protocol, operation
|
|
95
|
+
builders, polling functions, or provisioning interfaces.
|
|
65
96
|
|
|
66
|
-
##
|
|
97
|
+
## Failure model
|
|
67
98
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
99
|
+
An HTTP timeout or lost response does not prove that a Sheet write failed. The
|
|
100
|
+
worker preserves durable work, classifies recoverable failures, and uses
|
|
101
|
+
idempotent effects plus reconciliation to repair drift later. The SQLite commit
|
|
102
|
+
is the application success boundary; remote delivery is at-least-once and
|
|
103
|
+
asynchronous.
|