@shivaedev/work-fleet 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +6 -4
- package/dist/DecisionCode.d.ts +1 -1
- package/dist/DecisionCode.d.ts.map +1 -1
- package/dist/DecisionCode.js +1 -0
- package/dist/DecisionCode.js.map +1 -1
- package/dist/admit.d.ts +2 -2
- package/dist/board/acknowledgeDecision.d.ts.map +1 -1
- package/dist/board/acknowledgeDecision.js +7 -3
- package/dist/board/acknowledgeDecision.js.map +1 -1
- package/dist/board/briefRevision.d.ts +1 -1
- package/dist/board/briefRevision.d.ts.map +1 -1
- package/dist/board/briefRevision.js +1 -1
- package/dist/board/briefRevision.js.map +1 -1
- package/dist/board/closePublishedDecision.d.ts +22 -0
- package/dist/board/closePublishedDecision.d.ts.map +1 -0
- package/dist/board/closePublishedDecision.js +41 -0
- package/dist/board/closePublishedDecision.js.map +1 -0
- package/dist/board/decisionAnswer.d.ts +2 -2
- package/dist/board/decisionAnswer.d.ts.map +1 -1
- package/dist/board/decisionAnswer.js +8 -8
- package/dist/board/decisionAnswer.js.map +1 -1
- package/dist/board/decisionReading.js +2 -2
- package/dist/board/decisionReading.js.map +1 -1
- package/dist/board/documents.d.ts +1 -2
- package/dist/board/documents.d.ts.map +1 -1
- package/dist/board/documents.js +4 -4
- package/dist/board/documents.js.map +1 -1
- package/dist/board/fleetField.d.ts +1 -1
- package/dist/board/fleetField.d.ts.map +1 -1
- package/dist/board/markdown.d.ts.map +1 -1
- package/dist/board/markdown.js +6 -5
- package/dist/board/markdown.js.map +1 -1
- package/dist/board/publish.d.ts +1 -1
- package/dist/board/publish.d.ts.map +1 -1
- package/dist/board/publish.js +10 -8
- package/dist/board/publish.js.map +1 -1
- package/dist/board/publishReport.js +2 -2
- package/dist/board/publishReport.js.map +1 -1
- package/dist/board/readDocument.js +1 -1
- package/dist/board/readDocument.js.map +1 -1
- package/dist/board/readPass.d.ts +1 -1
- package/dist/board/readPass.d.ts.map +1 -1
- package/dist/board/readPass.js +1 -1
- package/dist/board/readPass.js.map +1 -1
- package/dist/board/reportIdentity.js +1 -1
- package/dist/board/reportIdentity.js.map +1 -1
- package/dist/board/reportLinks.js +1 -1
- package/dist/board/reportLinks.js.map +1 -1
- package/dist/board/schema.d.ts +13 -13
- package/dist/board/schema.js +2 -2
- package/dist/board/schema.js.map +1 -1
- package/dist/board/upgradeDecisionClosure.d.ts +5 -0
- package/dist/board/upgradeDecisionClosure.d.ts.map +1 -0
- package/dist/board/upgradeDecisionClosure.js +46 -0
- package/dist/board/upgradeDecisionClosure.js.map +1 -0
- package/dist/board/workRevision.js +2 -2
- package/dist/board/workRevision.js.map +1 -1
- package/dist/board/writeHealth.d.ts +1 -1
- package/dist/board/writeHealth.d.ts.map +1 -1
- package/dist/board/writeHealth.js +1 -1
- package/dist/board/writeHealth.js.map +1 -1
- package/dist/board/writePublished.d.ts +1 -1
- package/dist/board/writePublished.d.ts.map +1 -1
- package/dist/board/writePublished.js +5 -1
- package/dist/board/writePublished.js.map +1 -1
- package/dist/cli.js +11 -5
- package/dist/cli.js.map +1 -1
- package/dist/engine/abandonStalled.d.ts +530 -533
- package/dist/engine/abandonStalled.d.ts.map +1 -1
- package/dist/engine/admissionOrder.d.ts +4 -4
- package/dist/engine/applyResolution.d.ts +4 -4
- package/dist/engine/approveBrief.d.ts +6 -6
- package/dist/engine/authorizeResolution.d.ts +528 -531
- package/dist/engine/authorizeResolution.d.ts.map +1 -1
- package/dist/engine/authorizeResolution.js +1 -1
- package/dist/engine/authorizeResolution.js.map +1 -1
- package/dist/engine/boardBrief.d.ts +7 -6
- package/dist/engine/boardBrief.d.ts.map +1 -1
- package/dist/engine/boardBrief.js +3 -10
- package/dist/engine/boardBrief.js.map +1 -1
- package/dist/engine/capacityRetry.d.ts +1715 -1724
- package/dist/engine/capacityRetry.d.ts.map +1 -1
- package/dist/engine/closeDecisions.d.ts +4 -4
- package/dist/engine/completeBoardWork.d.ts +4 -4
- package/dist/engine/completeReport.d.ts +277 -280
- package/dist/engine/completeReport.d.ts.map +1 -1
- package/dist/engine/continueCommand.d.ts +2 -2
- package/dist/engine/continueWorker.d.ts +4 -4
- package/dist/engine/decisionCopy.d.ts +15 -0
- package/dist/engine/decisionCopy.d.ts.map +1 -0
- package/dist/engine/decisionCopy.js +44 -0
- package/dist/engine/decisionCopy.js.map +1 -0
- package/dist/engine/deliverPendingAnswers.d.ts +534 -537
- package/dist/engine/deliverPendingAnswers.d.ts.map +1 -1
- package/dist/engine/dispatchCommand.d.ts +2 -2
- package/dist/engine/dispatchCommand.d.ts.map +1 -1
- package/dist/engine/dispatchCommand.js +4 -27
- package/dist/engine/dispatchCommand.js.map +1 -1
- package/dist/engine/dispatchFailure.d.ts +9391 -0
- package/dist/engine/dispatchFailure.d.ts.map +1 -0
- package/dist/engine/dispatchFailure.js +24 -0
- package/dist/engine/dispatchFailure.js.map +1 -0
- package/dist/engine/ensureDecisionOwner.d.ts +4 -4
- package/dist/engine/ensurePublication.d.ts +4 -4
- package/dist/engine/failureCode.js +1 -1
- package/dist/engine/failureCode.js.map +1 -1
- package/dist/engine/health.d.ts +1 -1
- package/dist/engine/health.d.ts.map +1 -1
- package/dist/engine/inspectRenewal.d.ts +4 -4
- package/dist/engine/launchInput.d.ts +2 -2
- package/dist/engine/launchReceipt.d.ts +2 -2
- package/dist/engine/makeAdopt.d.ts +4 -4
- package/dist/engine/makeAdvance.d.ts +2 -2
- package/dist/engine/makeDeliver.d.ts +4 -4
- package/dist/engine/makeDeliver.d.ts.map +1 -1
- package/dist/engine/makeDeliver.js +5 -1
- package/dist/engine/makeDeliver.js.map +1 -1
- package/dist/engine/makeHuman.d.ts +4 -4
- package/dist/engine/makeLaunch.d.ts +4 -4
- package/dist/engine/makeObserve.d.ts +4 -4
- package/dist/engine/makeReview.d.ts +4 -4
- package/dist/engine/makeState.d.ts +533 -536
- package/dist/engine/makeState.d.ts.map +1 -1
- package/dist/engine/makeState.js +9 -2
- package/dist/engine/makeState.js.map +1 -1
- package/dist/engine/makeValidate.d.ts +4 -4
- package/dist/engine/mergeReadiness.d.ts +536 -539
- package/dist/engine/mergeReadiness.d.ts.map +1 -1
- package/dist/engine/mergeReadiness.js +1 -1
- package/dist/engine/mergeReadiness.js.map +1 -1
- package/dist/engine/missingBoardWork.d.ts +9936 -0
- package/dist/engine/missingBoardWork.d.ts.map +1 -0
- package/dist/engine/missingBoardWork.js +17 -0
- package/dist/engine/missingBoardWork.js.map +1 -0
- package/dist/engine/observeDeliveryFailure.d.ts +530 -533
- package/dist/engine/observeDeliveryFailure.d.ts.map +1 -1
- package/dist/engine/observeRenewal.d.ts +6 -6
- package/dist/engine/obtainReview.d.ts +2 -2
- package/dist/engine/operationRecord.d.ts +26 -26
- package/dist/engine/persistTerminalReceipts.d.ts +4 -4
- package/dist/engine/prepareCommand.d.ts +2 -2
- package/dist/engine/queueAnswerCommand.d.ts +2 -2
- package/dist/engine/readOrContinueReview.d.ts +2 -2
- package/dist/engine/readResolution.d.ts +1 -1
- package/dist/engine/readResolution.js +1 -1
- package/dist/engine/readResolution.js.map +1 -1
- package/dist/engine/readRetry.d.ts +1177 -1183
- package/dist/engine/readRetry.d.ts.map +1 -1
- package/dist/engine/reassignCommand.d.ts +2 -2
- package/dist/engine/reconcileAttempt.d.ts +2 -2
- package/dist/engine/reconcileCommand.d.ts +2 -2
- package/dist/engine/reconcileCommand.d.ts.map +1 -1
- package/dist/engine/reconcileCommand.js +2 -1
- package/dist/engine/reconcileCommand.js.map +1 -1
- package/dist/engine/recordResponseCommand.d.ts +2 -2
- package/dist/engine/recoverStall.d.ts +530 -533
- package/dist/engine/recoverStall.d.ts.map +1 -1
- package/dist/engine/recoverUnobservable.d.ts +530 -533
- package/dist/engine/recoverUnobservable.d.ts.map +1 -1
- package/dist/engine/refreshBrief.d.ts +1177 -1183
- package/dist/engine/refreshBrief.d.ts.map +1 -1
- package/dist/engine/refreshReviewResult.d.ts +4 -4
- package/dist/engine/releaseClosedPreparation.d.ts +530 -533
- package/dist/engine/releaseClosedPreparation.d.ts.map +1 -1
- package/dist/engine/releaseExecution.d.ts +530 -533
- package/dist/engine/releaseExecution.d.ts.map +1 -1
- package/dist/engine/releaseFinishedWork.d.ts +2 -2
- package/dist/engine/repository.d.ts +24 -24
- package/dist/engine/repository.js +1 -1
- package/dist/engine/repository.js.map +1 -1
- package/dist/engine/requestConflictRepair.d.ts +530 -533
- package/dist/engine/requestConflictRepair.d.ts.map +1 -1
- package/dist/engine/requestRework.d.ts +4 -4
- package/dist/engine/resolveCommand.d.ts +2 -2
- package/dist/engine/resolveExecution.d.ts +530 -533
- package/dist/engine/resolveExecution.d.ts.map +1 -1
- package/dist/engine/resumeAttempt.d.ts +530 -533
- package/dist/engine/resumeAttempt.d.ts.map +1 -1
- package/dist/engine/retireUnacknowledged.d.ts +4 -4
- package/dist/engine/retryTerminal.d.ts +528 -531
- package/dist/engine/retryTerminal.d.ts.map +1 -1
- package/dist/engine/saveLaunch.d.ts +532 -535
- package/dist/engine/saveLaunch.d.ts.map +1 -1
- package/dist/engine/saveLaunch.js +2 -1
- package/dist/engine/saveLaunch.js.map +1 -1
- package/dist/engine/scheduler.d.ts +4 -4
- package/dist/engine/scheduler.d.ts.map +1 -1
- package/dist/engine/scheduler.js +4 -1
- package/dist/engine/scheduler.js.map +1 -1
- package/dist/engine/sessionCleanup.d.ts +4 -4
- package/dist/engine/settleMergedDelivery.d.ts +530 -533
- package/dist/engine/settleMergedDelivery.d.ts.map +1 -1
- package/dist/engine/situations/choices.d.ts +20 -0
- package/dist/engine/situations/choices.d.ts.map +1 -0
- package/dist/engine/situations/choices.js +21 -0
- package/dist/engine/situations/choices.js.map +1 -0
- package/dist/engine/situations/service.d.ts +60 -0
- package/dist/engine/situations/service.d.ts.map +1 -0
- package/dist/engine/situations/service.js +51 -0
- package/dist/engine/situations/service.js.map +1 -0
- package/dist/engine/situations/stop.d.ts +25 -0
- package/dist/engine/situations/stop.d.ts.map +1 -0
- package/dist/engine/situations/stop.js +25 -0
- package/dist/engine/situations/stop.js.map +1 -0
- package/dist/engine/situations/work.d.ts +114 -0
- package/dist/engine/situations/work.d.ts.map +1 -0
- package/dist/engine/situations/work.js +91 -0
- package/dist/engine/situations/work.js.map +1 -0
- package/dist/engine/steerBrief.d.ts +532 -535
- package/dist/engine/steerBrief.d.ts.map +1 -1
- package/dist/engine/submissionFailure.d.ts +526 -529
- package/dist/engine/submissionFailure.d.ts.map +1 -1
- package/dist/engine/submitLaunch.d.ts +528 -531
- package/dist/engine/submitLaunch.d.ts.map +1 -1
- package/dist/engine/threadNames.js +1 -1
- package/dist/engine/threadNames.js.map +1 -1
- package/dist/engine/workerReport.d.ts +7 -7
- package/dist/engine/workerReport.d.ts.map +1 -1
- package/dist/exposeFailure.js +1 -1
- package/dist/exposeFailure.js.map +1 -1
- package/dist/fleet.d.ts +26 -26
- package/dist/fleet.js +1 -1
- package/dist/fleet.js.map +1 -1
- package/dist/host/actionCommands.d.ts +10 -10
- package/dist/host/actionCommands.d.ts.map +1 -1
- package/dist/host/actionCommands.js +6 -6
- package/dist/host/actionCommands.js.map +1 -1
- package/dist/host/admission.d.ts +4 -4
- package/dist/host/answerWork.d.ts +4 -3
- package/dist/host/answerWork.d.ts.map +1 -1
- package/dist/host/cliOptions.d.ts +5 -1
- package/dist/host/cliOptions.d.ts.map +1 -1
- package/dist/host/cliOptions.js +6 -4
- package/dist/host/cliOptions.js.map +1 -1
- package/dist/host/commands.d.ts +1 -1
- package/dist/host/commands.d.ts.map +1 -1
- package/dist/host/configSettings.d.ts +5 -5
- package/dist/host/daemon.d.ts +133 -132
- package/dist/host/daemon.d.ts.map +1 -1
- package/dist/host/daemon.js +7 -3
- package/dist/host/daemon.js.map +1 -1
- package/dist/host/daemonClient.d.ts +28 -28
- package/dist/host/daemonClient.js +1 -1
- package/dist/host/daemonClient.js.map +1 -1
- package/dist/host/daemonContract.d.ts +146 -146
- package/dist/host/daemonContract.d.ts.map +1 -1
- package/dist/host/daemonContract.js +1 -1
- package/dist/host/daemonContract.js.map +1 -1
- package/dist/host/daemonDiagnostics.js +1 -1
- package/dist/host/daemonDiagnostics.js.map +1 -1
- package/dist/host/daemonHandlers.d.ts +1 -1
- package/dist/host/daemonHandlers.d.ts.map +1 -1
- package/dist/host/daemonPort.d.ts +6 -0
- package/dist/host/daemonPort.d.ts.map +1 -0
- package/dist/host/daemonPort.js +40 -0
- package/dist/host/daemonPort.js.map +1 -0
- package/dist/host/daemonSnapshots.d.ts +1 -1
- package/dist/host/daemonSnapshots.d.ts.map +1 -1
- package/dist/host/daemonSnapshots.js +1 -1
- package/dist/host/daemonSnapshots.js.map +1 -1
- package/dist/host/fleetStatus.d.ts +5 -5
- package/dist/host/follow.d.ts +1 -0
- package/dist/host/follow.d.ts.map +1 -1
- package/dist/host/follow.js +10 -4
- package/dist/host/follow.js.map +1 -1
- package/dist/host/followCommands.d.ts +2 -2
- package/dist/host/followCommands.d.ts.map +1 -1
- package/dist/host/followCommands.js +4 -2
- package/dist/host/followCommands.js.map +1 -1
- package/dist/host/githubApi.js +1 -1
- package/dist/host/githubApi.js.map +1 -1
- package/dist/host/githubDelivery.js +3 -1
- package/dist/host/githubDelivery.js.map +1 -1
- package/dist/host/healthLayer.js +1 -1
- package/dist/host/healthLayer.js.map +1 -1
- package/dist/host/integrations.js +1 -1
- package/dist/host/integrations.js.map +1 -1
- package/dist/host/mainSource.js +1 -1
- package/dist/host/mainSource.js.map +1 -1
- package/dist/host/providerHealth.js +1 -1
- package/dist/host/providerHealth.js.map +1 -1
- package/dist/host/quota.js +1 -1
- package/dist/host/quota.js.map +1 -1
- package/dist/host/recordDecisionResponse.d.ts +3 -2
- package/dist/host/recordDecisionResponse.d.ts.map +1 -1
- package/dist/host/recordDecisionResponse.js +1 -1
- package/dist/host/recordDecisionResponse.js.map +1 -1
- package/dist/host/releaseWork.d.ts +6 -5
- package/dist/host/releaseWork.d.ts.map +1 -1
- package/dist/host/releaseWork.js +2 -2
- package/dist/host/releaseWork.js.map +1 -1
- package/dist/host/renderStatus.d.ts +4 -1
- package/dist/host/renderStatus.d.ts.map +1 -1
- package/dist/host/renderStatus.js +6 -6
- package/dist/host/renderStatus.js.map +1 -1
- package/dist/host/reportBoard.js +1 -1
- package/dist/host/reportBoard.js.map +1 -1
- package/dist/host/runtime.d.ts +2 -2
- package/dist/host/runtime.d.ts.map +1 -1
- package/dist/host/runtime.js +1 -1
- package/dist/host/runtime.js.map +1 -1
- package/dist/host/statusLayer.js +2 -2
- package/dist/host/statusLayer.js.map +1 -1
- package/dist/host/watch.d.ts.map +1 -1
- package/dist/host/watch.js +1 -1
- package/dist/host/watch.js.map +1 -1
- package/dist/model.d.ts +9 -9
- package/dist/model.js +1 -1
- package/dist/model.js.map +1 -1
- package/dist/operations.d.ts +57 -57
- package/dist/packageInfo.d.ts +1 -1
- package/dist/packageInfo.js +1 -1
- package/dist/policy.d.ts +3 -2
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +2 -1
- package/dist/policy.js.map +1 -1
- package/dist/prompt/briefEdit.js +1 -1
- package/dist/prompt/briefEdit.js.map +1 -1
- package/dist/providers/codexCloud.js +1 -1
- package/dist/providers/codexCloud.js.map +1 -1
- package/dist/providers/codexLocal.js +1 -1
- package/dist/providers/codexLocal.js.map +1 -1
- package/dist/qualifyDependencies.d.ts +2 -2
- package/dist/reportFileDirectory.js +1 -1
- package/dist/reportFileDirectory.js.map +1 -1
- package/dist/scheduling/admission.d.ts +6 -6
- package/dist/scheduling/areas.d.ts +6 -6
- package/dist/scheduling/backPressure.d.ts +6 -6
- package/dist/session/schema.d.ts +1 -1
- package/dist/session/service.js +1 -1
- package/dist/session/service.js.map +1 -1
- package/dist/storage/fleetMigrations.d.ts.map +1 -1
- package/dist/storage/fleetMigrations.js +5 -0
- package/dist/storage/fleetMigrations.js.map +1 -1
- package/dist/storage/makeFleetTransaction.d.ts +1 -1
- package/dist/storage/makeFleetTransaction.d.ts.map +1 -1
- package/dist/storage/makeFleetTransaction.js +1 -1
- package/dist/storage/makeFleetTransaction.js.map +1 -1
- package/dist/storage/makeForeignReservations.d.ts.map +1 -1
- package/dist/storage/makeForeignReservations.js +16 -4
- package/dist/storage/makeForeignReservations.js.map +1 -1
- package/package.json +8 -9
- package/src/DecisionCode.ts +1 -0
- package/src/board/acknowledgeDecision.ts +7 -3
- package/src/board/briefRevision.ts +2 -2
- package/src/board/closePublishedDecision.ts +51 -0
- package/src/board/decisionAnswer.ts +11 -9
- package/src/board/decisionReading.ts +3 -3
- package/src/board/documents.ts +5 -6
- package/src/board/fleetField.ts +1 -1
- package/src/board/markdown.ts +6 -5
- package/src/board/publish.ts +10 -8
- package/src/board/publishReport.ts +2 -2
- package/src/board/readDocument.ts +1 -1
- package/src/board/readPass.ts +2 -2
- package/src/board/reportIdentity.ts +1 -1
- package/src/board/reportLinks.ts +1 -1
- package/src/board/schema.ts +2 -2
- package/src/board/upgradeDecisionClosure.ts +61 -0
- package/src/board/workRevision.ts +2 -2
- package/src/board/writeHealth.ts +2 -2
- package/src/board/writePublished.ts +13 -4
- package/src/cli.ts +13 -5
- package/src/engine/authorizeResolution.ts +1 -1
- package/src/engine/boardBrief.ts +11 -19
- package/src/engine/decisionCopy.ts +63 -0
- package/src/engine/dispatchCommand.ts +4 -34
- package/src/engine/dispatchFailure.ts +25 -0
- package/src/engine/failureCode.ts +1 -1
- package/src/engine/health.ts +1 -1
- package/src/engine/makeDeliver.ts +5 -1
- package/src/engine/makeState.ts +14 -4
- package/src/engine/mergeReadiness.ts +0 -2
- package/src/engine/missingBoardWork.ts +24 -0
- package/src/engine/readResolution.ts +2 -2
- package/src/engine/reconcileCommand.ts +7 -1
- package/src/engine/repository.ts +1 -1
- package/src/engine/saveLaunch.ts +2 -0
- package/src/engine/scheduler.ts +4 -1
- package/src/engine/situations/choices.ts +36 -0
- package/src/engine/situations/service.ts +82 -0
- package/src/engine/situations/stop.ts +60 -0
- package/src/engine/situations/work.ts +94 -0
- package/src/engine/threadNames.ts +1 -1
- package/src/exposeFailure.ts +1 -1
- package/src/fleet.ts +1 -1
- package/src/host/actionCommands.ts +6 -6
- package/src/host/cliOptions.ts +10 -5
- package/src/host/daemon.ts +7 -3
- package/src/host/daemonClient.ts +1 -1
- package/src/host/daemonContract.ts +1 -1
- package/src/host/daemonDiagnostics.ts +1 -1
- package/src/host/daemonPort.ts +50 -0
- package/src/host/daemonSnapshots.ts +1 -1
- package/src/host/follow.ts +16 -5
- package/src/host/followCommands.ts +4 -2
- package/src/host/githubApi.ts +1 -1
- package/src/host/githubDelivery.ts +3 -1
- package/src/host/healthLayer.ts +1 -1
- package/src/host/integrations.ts +1 -1
- package/src/host/mainSource.ts +1 -1
- package/src/host/providerHealth.ts +1 -1
- package/src/host/quota.ts +1 -1
- package/src/host/recordDecisionResponse.ts +1 -1
- package/src/host/releaseWork.ts +2 -2
- package/src/host/renderStatus.ts +6 -7
- package/src/host/reportBoard.ts +1 -1
- package/src/host/runtime.ts +1 -1
- package/src/host/statusLayer.ts +3 -3
- package/src/host/watch.ts +4 -1
- package/src/model.ts +1 -1
- package/src/packageInfo.ts +1 -1
- package/src/policy.ts +2 -1
- package/src/prompt/briefEdit.ts +1 -1
- package/src/providers/codexCloud.ts +1 -1
- package/src/providers/codexLocal.ts +1 -1
- package/src/reportFileDirectory.ts +1 -1
- package/src/session/service.ts +1 -1
- package/src/storage/fleetMigrations.ts +5 -0
- package/src/storage/makeFleetTransaction.ts +2 -2
- package/src/storage/makeForeignReservations.ts +15 -4
- package/dist/engine/releaseOnly.d.ts +0 -3
- package/dist/engine/releaseOnly.d.ts.map +0 -1
- package/dist/engine/releaseOnly.js +0 -19
- package/dist/engine/releaseOnly.js.map +0 -1
- package/src/engine/releaseOnly.ts +0 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fleetMigrations.js","sourceRoot":"","sources":["../../src/storage/fleetMigrations.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fleetMigrations.js","sourceRoot":"","sources":["../../src/storage/fleetMigrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAW,CAAC;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAiB;IAClG,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IACvC,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;QACjC,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACtC,KAAK,CAAC,CAAC,GAAG,CAAA,gBAAgB,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC,mGAAmG,CAAC;YACzJ,KAAK,CAAC,CAAC,GAAG,CAAA,gBAAgB,GAAG,CAAC,GAAG,SAAS,uBAAuB,CAAC,uGAAuG,CAAC;QAC3K,CAAC,CAAC;QACF,uCAAuC,EAAE,GAAG,CAAA,eAAe,GAAG,CAAC,GAAG,SAAS,uBAAuB,CAAC,oBAAoB;QACvH,mBAAmB,EAAE,GAAG,CAAA,eAAe,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC,iEAAiE;QACnI,mBAAmB,EAAE,GAAG,CAAA,UAAU,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC;;;;;;;;;;;;;;;oFAeqB;QAClF,gBAAgB,EAAE,WAAW,CAAC,SAAS,CAAC;QACxC,kBAAkB,EAAE,qBAAqB,CAAC,SAAS,CAAC;QACpD,kBAAkB,EAAE,GAAG,CAAA,eAAe,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC,6BAA6B,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO;QAClI,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACnD,KAAK,CAAC,CAAC,GAAG,CAAA,eAAe,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;YACjG,CAAC;QACF,CAAC,CAAC;QACF,qBAAqB,EAAE,GAAG,CAAA,eAAe,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC,eAAe,GAAG,CAAC,kBAAkB,CAAC,OAAO;QACjH,uBAAuB,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACpD,oBAAoB,EAAE,GAAG,CAAA,eAAe,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC,eAAe,GAAG,CAAC,gBAAgB,CAAC,OAAO;QAC9G,iBAAiB,EAAE,WAAW,CAAC,SAAS,CAAC;QACzC,sBAAsB,EAAE,GAAG,CAAA,gBAAgB,GAAG,CAAC,GAAG,SAAS,aAAa,CAAC;;;IAGvE;QACF,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACtC,KAAK,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACtD,KAAK,CAAC,CAAC,GAAG,CAAA,eAAe,GAAG,CAAC,GAAG,SAAS,aAAa,CAAC,0DAA0D,CAAC;QACnH,CAAC,CAAC;QACF,2BAA2B,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAChD,KAAK,CAAC,CAAC,GAAG,CAAA,eAAe,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC5F,KAAK,CAAC,CAAC,GAAG,CAAA,eAAe,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzG,CAAC,CAAC;QACF,2BAA2B,EAAE,GAAG,CAAA,UAAU,GAAG,CAAC,GAAG,SAAS,UAAU,CAAC;;;oCAGnC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;oHAC6B;KAClH,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -2,5 +2,5 @@ import { Effect } from "effect";
|
|
|
2
2
|
import * as Reactivity from "effect/reactivity/Reactivity";
|
|
3
3
|
import { SqlClient } from "effect/sql";
|
|
4
4
|
import { type Key } from "@shivaedev/effect-contract/keys.ts";
|
|
5
|
-
export declare const makeFleetTransaction: Effect.Effect<<A, E, R>(keys: readonly Key[], body: Effect.Effect<A, E, R>) => Effect.Effect<A, import("effect/sql/SqlError").SqlError | Exclude<E, import("effect/sql/SqlError").SqlError>, Exclude<Exclude<R, SqlClient.SqlClient>, Reactivity.Reactivity>>, never, SqlClient.SqlClient>;
|
|
5
|
+
export declare const makeFleetTransaction: Effect.Effect<<A, E, R>(keys: readonly Key[] | ((value: A) => readonly Key[]), body: Effect.Effect<A, E, R>) => Effect.Effect<A, import("effect/sql/SqlError").SqlError | Exclude<E, import("effect/sql/SqlError").SqlError>, Exclude<Exclude<R, SqlClient.SqlClient>, Reactivity.Reactivity>>, never, SqlClient.SqlClient>;
|
|
6
6
|
//# sourceMappingURL=makeFleetTransaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeFleetTransaction.d.ts","sourceRoot":"","sources":["../../src/storage/makeFleetTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAoB,KAAK,GAAG,EAAE,MAAM,oCAAoC,CAAC;AAGhF,eAAO,MAAM,oBAAoB,iBAIxB,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,SAAS,GAAG,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"makeFleetTransaction.d.ts","sourceRoot":"","sources":["../../src/storage/makeFleetTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAoB,KAAK,GAAG,EAAE,MAAM,oCAAoC,CAAC;AAGhF,eAAO,MAAM,oBAAoB,iBAIxB,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,SAAS,GAAG,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,gNAKnG,CAAC"}
|
|
@@ -7,6 +7,6 @@ export const makeFleetTransaction = Effect.gen(function* () {
|
|
|
7
7
|
const sql = yield* SqlClient.SqlClient;
|
|
8
8
|
const current = yield* Effect.serviceOption(Reactivity.Reactivity);
|
|
9
9
|
const reactivity = current._tag === "Some" ? current.value : yield* Reactivity.make;
|
|
10
|
-
return (keys, body) => transact(Effect.tap(body, () => invalidateOnCommit(invalidationKeys(keys))), { onSqlError: (error) => error }).pipe(Effect.provideService(SqlClient.SqlClient, sql), Effect.provideService(Reactivity.Reactivity, reactivity));
|
|
10
|
+
return (keys, body) => transact(Effect.tap(body, (value) => invalidateOnCommit(invalidationKeys(typeof keys === "function" ? keys(value) : keys))), { onSqlError: (error) => error }).pipe(Effect.provideService(SqlClient.SqlClient, sql), Effect.provideService(Reactivity.Reactivity, reactivity));
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=makeFleetTransaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeFleetTransaction.js","sourceRoot":"","sources":["../../src/storage/makeFleetTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAY,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAEjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACvD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;IACpF,OAAO,CAAU,
|
|
1
|
+
{"version":3,"file":"makeFleetTransaction.js","sourceRoot":"","sources":["../../src/storage/makeFleetTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAY,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAEjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACvD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;IACpF,OAAO,CAAU,IAAqD,EAAE,IAA4B,EAAE,EAAE,CACvG,QAAQ,CACP,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAClH,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAChC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AACpH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeForeignReservations.d.ts","sourceRoot":"","sources":["../../src/storage/makeForeignReservations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvC,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"makeForeignReservations.d.ts","sourceRoot":"","sources":["../../src/storage/makeForeignReservations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvC,eAAO,MAAM,uBAAuB;;;;;;;4BA8BV,MAAM,cAAa;QAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE;8BAcrG,CAAC"}
|
|
@@ -13,12 +13,24 @@ export const makeForeignReservations = Effect.fn("FleetStore.makeForeignReservat
|
|
|
13
13
|
tableName: `${namespace}_foreign_reservations`,
|
|
14
14
|
});
|
|
15
15
|
const lock = sql `select pg_advisory_xact_lock(hashtextextended(${`work_fleet_admission:${namespace}`}, 0))`;
|
|
16
|
+
function exists(owner) {
|
|
17
|
+
return reservations.findMany({ where: { owner } }).pipe(Effect.map((rows) => rows.length > 0));
|
|
18
|
+
}
|
|
16
19
|
return {
|
|
17
20
|
foreignReservations: () => reservations.findMany({ orderBy: { direction: "asc", field: "owner" } }),
|
|
18
|
-
releaseForeign: (
|
|
19
|
-
yield*
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
releaseForeign: Effect.fn("FleetStore.releaseForeign")(function* (owner) {
|
|
22
|
+
if (!(yield* exists(owner))) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
yield* commit((deleted) => (deleted ? [fleetRecords.list] : []), Effect.gen(function* () {
|
|
26
|
+
yield* lock;
|
|
27
|
+
if (!(yield* exists(owner))) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
yield* reservations.delete(owner);
|
|
31
|
+
return true;
|
|
32
|
+
}));
|
|
33
|
+
}),
|
|
22
34
|
reserveForeign: (owner, occupancy = { backlog: true, executing: true }) => commit([fleetRecords.list], Effect.gen(function* () {
|
|
23
35
|
yield* lock;
|
|
24
36
|
const existing = yield* reservations.findMany({ where: { owner } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeForeignReservations.js","sourceRoot":"","sources":["../../src/storage/makeForeignReservations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC,oCAAoC,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAiB;IAClH,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IACvC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC;IAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,qBAAqB,EAAE;QACjE,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,cAAc;QAC1B,SAAS,EAAE,GAAG,SAAS,uBAAuB;KAC9C,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,GAAG,CAAA,iDAAiD,wBAAwB,SAAS,EAAE,OAAO,CAAC;IAC5G,OAAO;QACN,mBAAmB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;QACnG,cAAc,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"makeForeignReservations.js","sourceRoot":"","sources":["../../src/storage/makeForeignReservations.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/work-fleet",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Optional Board-backed execution, review and authorized delivery",
|
|
5
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/work-fleet#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -24,9 +24,8 @@
|
|
|
24
24
|
},
|
|
25
25
|
"exports": {
|
|
26
26
|
"./*.ts": {
|
|
27
|
-
"types": "./dist/*.d.ts",
|
|
28
27
|
"source": "./src/*.ts",
|
|
29
|
-
"
|
|
28
|
+
"types": "./dist/*.d.ts",
|
|
30
29
|
"default": "./dist/*.js"
|
|
31
30
|
},
|
|
32
31
|
"./package.json": "./package.json"
|
|
@@ -46,20 +45,20 @@
|
|
|
46
45
|
"dependencies": {
|
|
47
46
|
"@effect/sql-pg": "4.0.4",
|
|
48
47
|
"@shivaedev/effect-contract": "0.5.1",
|
|
49
|
-
"@shivaedev/effect-service": "0.
|
|
48
|
+
"@shivaedev/effect-service": "0.4.0",
|
|
50
49
|
"@shivaedev/effect-sql": "0.5.1",
|
|
51
|
-
"@shivaedev/platform": "0.
|
|
52
|
-
"@shivaedev/work-board": "0.
|
|
50
|
+
"@shivaedev/platform": "0.16.0",
|
|
51
|
+
"@shivaedev/work-board": "0.18.0",
|
|
53
52
|
"yaml": "2.9.1"
|
|
54
53
|
},
|
|
55
54
|
"devDependencies": {
|
|
56
55
|
"@effect/platform-node": "4.0.4",
|
|
57
56
|
"@effect/platform-node-shared": "4.0.4",
|
|
58
57
|
"@effect/vitest": "4.0.4",
|
|
59
|
-
"@shivaedev/effect-test": "0.
|
|
58
|
+
"@shivaedev/effect-test": "0.6.0",
|
|
60
59
|
"@shivaedev/effect-test-sql": "0.5.4",
|
|
61
|
-
"@shivaedev/quality": "0.
|
|
62
|
-
"@shivaedev/test-story": "0.7.
|
|
60
|
+
"@shivaedev/quality": "0.25.0",
|
|
61
|
+
"@shivaedev/test-story": "0.7.1",
|
|
63
62
|
"@types/node": "24.19.2",
|
|
64
63
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
65
64
|
"effect": "4.0.4",
|
package/src/DecisionCode.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import { attention } from "@shivaedev/work-board/integration/attention.ts";
|
|
3
|
-
import { board as boardApi } from "@shivaedev/work-board/integration/board.ts";
|
|
4
|
-
import { responses } from "@shivaedev/work-board/integration/responses.ts";
|
|
2
|
+
import { attention } from "@shivaedev/work-board/server/integration/attention.ts";
|
|
3
|
+
import { board as boardApi } from "@shivaedev/work-board/server/integration/board.ts";
|
|
4
|
+
import { responses } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
5
|
+
import { closePublishedDecision } from "#board/closePublishedDecision.ts";
|
|
5
6
|
import { type BoardSnapshot, recordBoardSource } from "#board/readPass.ts";
|
|
6
7
|
import { BoardAcknowledgementStale, type BoardDecisionAcknowledgement } from "#board/schema.ts";
|
|
7
8
|
import { BoardFailure } from "#policy.ts";
|
|
@@ -49,5 +50,8 @@ export function acknowledgeDecision(root: string, realRoot: string, snapshot: Ef
|
|
|
49
50
|
Effect.mapError(() => new BoardFailure({ message: "The managed request acknowledgement could not be recorded on Board." })),
|
|
50
51
|
);
|
|
51
52
|
yield* recordBoardSource(realRoot, file, content, receiptDocument.parsed);
|
|
53
|
+
if (input.disposition === "superseded") {
|
|
54
|
+
yield* closePublishedDecision(root, realRoot, source);
|
|
55
|
+
}
|
|
52
56
|
});
|
|
53
57
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ParsedMetadata } from "@shivaedev/work-board/integration/board.ts";
|
|
2
|
-
import { responses } from "@shivaedev/work-board/integration/responses.ts";
|
|
1
|
+
import type { ParsedMetadata } from "@shivaedev/work-board/server/integration/board.ts";
|
|
2
|
+
import { responses } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
3
3
|
import { fleetDeliverable } from "#board/fleetField.ts";
|
|
4
4
|
|
|
5
5
|
const { revisionOf } = responses;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { parseDocument } from "yaml";
|
|
3
|
+
import { board } from "@shivaedev/work-board/server/integration/board.ts";
|
|
4
|
+
import type { BoardDocument } from "#board/documents.ts";
|
|
5
|
+
import { recordBoardSource } from "#board/readPass.ts";
|
|
6
|
+
import { writeCompletion } from "#board/writeCompletion.ts";
|
|
7
|
+
import { BoardFailure } from "#policy.ts";
|
|
8
|
+
|
|
9
|
+
export function publishedDecision(document: BoardDocument) {
|
|
10
|
+
const { fields, body, diagnostics } = document.parsed;
|
|
11
|
+
const workId = fields.relationships?.find((relation) => relation.kind === "relates_to")?.target;
|
|
12
|
+
const request = fields.attention?.[0];
|
|
13
|
+
if (
|
|
14
|
+
diagnostics.length > 0
|
|
15
|
+
|| fields.kind !== "decision"
|
|
16
|
+
|| !fields.id?.startsWith("decision.")
|
|
17
|
+
|| workId === undefined
|
|
18
|
+
|| !body.startsWith(`# Fleet decision for ${workId}\n`)
|
|
19
|
+
|| fields.attention?.length !== 1
|
|
20
|
+
|| request?.managed !== true
|
|
21
|
+
|| !request.id.startsWith(`${workId}.`)
|
|
22
|
+
) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const sequence = Number(request.id.slice(workId.length + 1));
|
|
26
|
+
return Number.isSafeInteger(sequence) ? { request, sequence, workId } : undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const closePublishedDecision = Effect.fn("FleetBoard.closePublishedDecision")(function* (
|
|
30
|
+
root: string,
|
|
31
|
+
realRoot: string,
|
|
32
|
+
document: BoardDocument,
|
|
33
|
+
) {
|
|
34
|
+
const decision = publishedDecision(document);
|
|
35
|
+
if (decision === undefined || decision.request.state !== "open") {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const header = document.parsed.raw;
|
|
39
|
+
if (header === undefined) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const metadata = parseDocument(header.replace(/^---\r?\n/u, "").replace(/---\r?\n?$/u, ""));
|
|
43
|
+
metadata.setIn(["attention", 0, "state"], "closed");
|
|
44
|
+
const content = `---\n${metadata.toString()}---\n${document.parsed.body}`;
|
|
45
|
+
yield* writeCompletion(root, realRoot, document.file, document.source, content).pipe(
|
|
46
|
+
Effect.mapError((error) => new BoardFailure({ message: error.message })),
|
|
47
|
+
);
|
|
48
|
+
const parsed = board.metadataParse(content);
|
|
49
|
+
yield* recordBoardSource(realRoot, document.file, content, parsed);
|
|
50
|
+
return { file: document.file, parsed, source: content };
|
|
51
|
+
});
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
1
|
+
import type { DecisionCopy } from "#engine/decisionCopy.ts";
|
|
2
|
+
import type { Choice } from "#engine/situations/choices.ts";
|
|
3
3
|
|
|
4
|
-
export function decisionAnswer(
|
|
5
|
-
if (
|
|
6
|
-
return
|
|
4
|
+
export function decisionAnswer({ question }: DecisionCopy) {
|
|
5
|
+
if (question === undefined) {
|
|
6
|
+
return undefined;
|
|
7
7
|
}
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const retry = question.retry === undefined ? "" : `${option("retry", question.retry)}\n`;
|
|
9
|
+
return `::::question{id="fleet-action" select="one"}\n### ${question.title}\n\n${retry}${option("release", question.release)}::::`;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function option(id: string, choice: Choice) {
|
|
13
|
+
return `:::option{id="${id}"}\n### ${choice.label}\n${choice.outcome}\n:::\n`;
|
|
12
14
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import { board } from "@shivaedev/work-board/integration/board.ts";
|
|
3
|
-
import type { Reading } from "@shivaedev/work-board/integration/responses.ts";
|
|
4
|
-
import { responses } from "@shivaedev/work-board/integration/responses.ts";
|
|
2
|
+
import { board } from "@shivaedev/work-board/server/integration/board.ts";
|
|
3
|
+
import type { Reading } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
4
|
+
import { responses } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
5
5
|
import type { BoardDocument } from "#board/documents.ts";
|
|
6
6
|
import type { BoardDecision, BoardDecisionReading } from "#board/schema.ts";
|
|
7
7
|
import { BoardFailure } from "#policy.ts";
|
package/src/board/documents.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect, FileSystem, Path } from "effect";
|
|
2
|
-
import type { MetadataDocument } from "@shivaedev/work-board/integration/board.ts";
|
|
3
|
-
import { board as boardApi } from "@shivaedev/work-board/integration/board.ts";
|
|
2
|
+
import type { MetadataDocument } from "@shivaedev/work-board/server/integration/board.ts";
|
|
3
|
+
import { board as boardApi } from "@shivaedev/work-board/server/integration/board.ts";
|
|
4
4
|
import { readDocument } from "#board/readDocument.ts";
|
|
5
5
|
import { BoardSnapshot, readSnapshot } from "#board/readPass.ts";
|
|
6
6
|
import { BoardFailure } from "#policy.ts";
|
|
@@ -13,6 +13,9 @@ export const snapshotDocument = Effect.fn("FleetBoard.snapshotDocument")(functio
|
|
|
13
13
|
const matches = snapshot.model.ids.get(workId);
|
|
14
14
|
const found = matches?.length === 1 ? snapshot.files.get(matches[0]?.file ?? "") : undefined;
|
|
15
15
|
if (found === undefined) {
|
|
16
|
+
if (matches === undefined && snapshot.problems.size === 0) {
|
|
17
|
+
return yield* Effect.fail(new BoardFailure({ code: "board-item-missing", message: `Board item no longer exists: ${workId}`, workId }));
|
|
18
|
+
}
|
|
16
19
|
const message = [
|
|
17
20
|
`Board identity is missing or ambiguous: ${workId}`,
|
|
18
21
|
...Array.from(snapshot.problems.values(), (failure) => failure.message),
|
|
@@ -83,7 +86,3 @@ export function boardDocuments(root: string, realRoot: string) {
|
|
|
83
86
|
export function boundSnapshot(root: string, realRoot: string, fs: FileSystem.FileSystem, path: Path.Path) {
|
|
84
87
|
return boardSnapshot(root, realRoot).pipe(Effect.provideService(FileSystem.FileSystem, fs), Effect.provideService(Path.Path, path));
|
|
85
88
|
}
|
|
86
|
-
|
|
87
|
-
export function boundDocuments(root: string, realRoot: string, fs: FileSystem.FileSystem, path: Path.Path) {
|
|
88
|
-
return boardDocuments(root, realRoot).pipe(Effect.provideService(FileSystem.FileSystem, fs), Effect.provideService(Path.Path, path));
|
|
89
|
-
}
|
package/src/board/fleetField.ts
CHANGED
package/src/board/markdown.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { Context, Effect, FileSystem, Layer, Path, Schema } from "effect";
|
|
2
|
-
import { defineService } from "@shivaedev/effect-service/
|
|
3
|
-
import { board as boardApi } from "@shivaedev/work-board/integration/board.ts";
|
|
2
|
+
import { defineService } from "@shivaedev/effect-service/defineService.ts";
|
|
3
|
+
import { board as boardApi } from "@shivaedev/work-board/server/integration/board.ts";
|
|
4
4
|
import { acknowledgeDecision } from "#board/acknowledgeDecision.ts";
|
|
5
5
|
import { briefRevision } from "#board/briefRevision.ts";
|
|
6
6
|
import { completionMarkdown } from "#board/completionMarkdown.ts";
|
|
7
7
|
import { decisionReading } from "#board/decisionReading.ts";
|
|
8
|
-
import {
|
|
8
|
+
import { boundSnapshot, refreshSnapshotDocument, snapshotDocument } from "#board/documents.ts";
|
|
9
9
|
import { fleetApproved, fleetDeliverable, fleetPriority } from "#board/fleetField.ts";
|
|
10
10
|
import { publishBoard } from "#board/publish.ts";
|
|
11
11
|
import { publishReport } from "#board/publishReport.ts";
|
|
12
12
|
import { workMetadata } from "#board/readPass.ts";
|
|
13
|
+
import { upgradeDecisionClosure } from "#board/upgradeDecisionClosure.ts";
|
|
13
14
|
import { workRevision } from "#board/workRevision.ts";
|
|
14
15
|
import { writeCompletion } from "#board/writeCompletion.ts";
|
|
15
16
|
import { BoardFailure, BoardGateway, Priority } from "#policy.ts";
|
|
@@ -24,8 +25,8 @@ const MarkdownBoard = defineService({
|
|
|
24
25
|
const fs = yield* FileSystem.FileSystem;
|
|
25
26
|
const path = yield* Path.Path;
|
|
26
27
|
const realRoot = yield* fs.realPath(root);
|
|
27
|
-
const
|
|
28
|
-
const
|
|
28
|
+
const snapshot = boundSnapshot(root, realRoot, fs, path).pipe(Effect.tap((current) => upgradeDecisionClosure(root, realRoot, current, fs)));
|
|
29
|
+
const documents = snapshot.pipe(Effect.map((current) => current.documents.filter((document) => !current.problems.has(document.file))));
|
|
29
30
|
const get = Effect.fn("FleetBoard.get")(function* (workId: string, options?: { readonly fresh?: boolean }) {
|
|
30
31
|
const current = yield* snapshot;
|
|
31
32
|
const found = yield* options?.fresh
|
package/src/board/publish.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { relative } from "node:path";
|
|
2
2
|
import { Clock, Effect } from "effect";
|
|
3
|
-
import { board as boardApi } from "@shivaedev/work-board/integration/board.ts";
|
|
4
|
-
import { responses } from "@shivaedev/work-board/integration/responses.ts";
|
|
3
|
+
import { board as boardApi } from "@shivaedev/work-board/server/integration/board.ts";
|
|
4
|
+
import { responses } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
5
5
|
import { decisionAnswer } from "#board/decisionAnswer.ts";
|
|
6
6
|
import type { BoardDocument } from "#board/documents.ts";
|
|
7
7
|
import { recordBoardSource } from "#board/readPass.ts";
|
|
8
8
|
import type { BoardDecision } from "#board/schema.ts";
|
|
9
|
+
import { type DecisionCopy, decisionCopy } from "#engine/decisionCopy.ts";
|
|
9
10
|
import { BoardFailure, type BoardWork, type Decision } from "#policy.ts";
|
|
10
11
|
|
|
11
12
|
const { publish, questionFrom, questionId, questionMarkdown, revisionOf } = responses;
|
|
@@ -23,14 +24,14 @@ function linked(text: string): string {
|
|
|
23
24
|
return url.protocol === "https:" || url.protocol === "http:" ? `<${url.href.replaceAll("<", "%3C").replaceAll(">", "%3E")}>` : quoted(text);
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
function decisionSource(itemId: string, work: BoardWork, input: Decision): string {
|
|
27
|
+
function decisionSource(itemId: string, work: BoardWork, input: Decision, copy: DecisionCopy): string {
|
|
27
28
|
const metadata = {
|
|
28
29
|
attention: [
|
|
29
30
|
{
|
|
30
31
|
id: input.id,
|
|
31
32
|
kind: "decision",
|
|
32
33
|
managed: true,
|
|
33
|
-
reason:
|
|
34
|
+
reason: copy.reason,
|
|
34
35
|
"response_from": [input.attentionOwner ?? "orchestrator"],
|
|
35
36
|
state: "open",
|
|
36
37
|
unblocks: [work.workId],
|
|
@@ -40,8 +41,8 @@ function decisionSource(itemId: string, work: BoardWork, input: Decision): strin
|
|
|
40
41
|
kind: "decision",
|
|
41
42
|
relationships: [{ kind: "relates_to", target: work.workId }],
|
|
42
43
|
};
|
|
43
|
-
const answer = decisionAnswer(
|
|
44
|
-
return `---\n${JSON.stringify(metadata)}\n---\n# Fleet decision for ${work.workId}\n\n## Decision\n\n${quoted(
|
|
44
|
+
const answer = decisionAnswer(copy);
|
|
45
|
+
return `---\n${JSON.stringify(metadata)}\n---\n# Fleet decision for ${work.workId}\n\n## Decision\n\n${quoted(copy.reason)}\n\n## Recommendation\n\n${quoted(copy.recommendation)}\n\n## Relevant links\n\n${input.links.map(linked).join("\n\n")}\n\n${answer === undefined ? "" : `${answer}\n\n`}## Reviewed Board work\n\n${quoted(work.context)}\n`;
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
export function publishBoard(root: string, realRoot: string, documents: Effect.Effect<readonly BoardDocument[], BoardFailure>) {
|
|
@@ -49,7 +50,8 @@ export function publishBoard(root: string, realRoot: string, documents: Effect.E
|
|
|
49
50
|
const workSourcePath = relative(realRoot, work.sourcePath);
|
|
50
51
|
const itemId = `decision.${revisionOf(JSON.stringify([work.workId, work.revision, workSourcePath, input.id, input.reason, input.recommendation, input.links, ...(input.worker === undefined ? [] : [input.worker])]))}`;
|
|
51
52
|
const existing = input.published === undefined ? undefined : (yield* documents).find((document) => document.file === input.published?.sourcePath);
|
|
52
|
-
const
|
|
53
|
+
const copy = decisionCopy(input);
|
|
54
|
+
const context = existing?.parsed.fields.id === itemId ? existing.source : decisionSource(itemId, work, input, copy);
|
|
53
55
|
const parsed = boardApi.metadataParse(context);
|
|
54
56
|
if (new TextEncoder().encode(context).length > 256 * 1024 || parsed.diagnostics.length > 0) {
|
|
55
57
|
return yield* Effect.fail(new BoardFailure({ message: "Fleet decision context exceeds Board limits or contains invalid attention metadata." }));
|
|
@@ -82,7 +84,7 @@ export function publishBoard(root: string, realRoot: string, documents: Effect.E
|
|
|
82
84
|
question: {
|
|
83
85
|
deadline: registeredAt + 48 * 60 * 60 * 1000,
|
|
84
86
|
item: itemId,
|
|
85
|
-
reason:
|
|
87
|
+
reason: copy.reason,
|
|
86
88
|
registeredAt,
|
|
87
89
|
request: input.id,
|
|
88
90
|
reviewedRevision: revision,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { relative } from "node:path";
|
|
2
2
|
import { Effect } from "effect";
|
|
3
|
-
import { board } from "@shivaedev/work-board/integration/board.ts";
|
|
4
|
-
import { responses } from "@shivaedev/work-board/integration/responses.ts";
|
|
3
|
+
import { board } from "@shivaedev/work-board/server/integration/board.ts";
|
|
4
|
+
import { responses } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
5
5
|
import { briefRevision } from "#board/briefRevision.ts";
|
|
6
6
|
import type { BoardDocument } from "#board/documents.ts";
|
|
7
7
|
import { recordBoardSource, workMetadata } from "#board/readPass.ts";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect, FileSystem } from "effect";
|
|
2
|
-
import { board as boardApi } from "@shivaedev/work-board/integration/board.ts";
|
|
2
|
+
import { board as boardApi } from "@shivaedev/work-board/server/integration/board.ts";
|
|
3
3
|
import { STATUS_MARKER } from "#board/statusMarkdown.ts";
|
|
4
4
|
import { BoardFailure } from "#policy.ts";
|
|
5
5
|
|
package/src/board/readPass.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
2
|
import { Context, Effect, type FileSystem, type Path } from "effect";
|
|
3
|
-
import type { MetadataModel, ParsedMetadata } from "@shivaedev/work-board/integration/board.ts";
|
|
4
|
-
import { board as boardApi } from "@shivaedev/work-board/integration/board.ts";
|
|
3
|
+
import type { MetadataModel, ParsedMetadata } from "@shivaedev/work-board/server/integration/board.ts";
|
|
4
|
+
import { board as boardApi } from "@shivaedev/work-board/server/integration/board.ts";
|
|
5
5
|
import type { BoardDocument } from "#board/documents.ts";
|
|
6
6
|
import type { BoardFailure, BoardWork } from "#policy.ts";
|
|
7
7
|
|
package/src/board/reportLinks.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
|
-
import { responses } from "@shivaedev/work-board/integration/responses.ts";
|
|
2
|
+
import { responses } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
3
3
|
import type { ReportFile, UnavailableAttachment } from "#reportAttachments.ts";
|
|
4
4
|
|
|
5
5
|
const { revisionOf } = responses;
|
package/src/board/schema.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
|
-
import { attention } from "@shivaedev/work-board/integration/attention.ts";
|
|
3
|
-
import { responses } from "@shivaedev/work-board/integration/responses.ts";
|
|
2
|
+
import { attention } from "@shivaedev/work-board/server/integration/attention.ts";
|
|
3
|
+
import { responses } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
4
4
|
import { SessionReceipt } from "#session/schema.ts";
|
|
5
5
|
|
|
6
6
|
const { RequestReceipt } = attention;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Effect, type FileSystem } from "effect";
|
|
2
|
+
import { responses } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
3
|
+
import { closePublishedDecision, publishedDecision } from "#board/closePublishedDecision.ts";
|
|
4
|
+
import type { BoardDocument } from "#board/documents.ts";
|
|
5
|
+
import type { BoardSnapshot } from "#board/readPass.ts";
|
|
6
|
+
import { writePublished } from "#board/writePublished.ts";
|
|
7
|
+
import { BoardFailure } from "#policy.ts";
|
|
8
|
+
|
|
9
|
+
const MARKER = ".fleet-decision-closure-v1.json";
|
|
10
|
+
|
|
11
|
+
export const upgradeDecisionClosure = Effect.fn("FleetBoard.upgradeDecisionClosure")(function* (
|
|
12
|
+
root: string,
|
|
13
|
+
realRoot: string,
|
|
14
|
+
snapshot: BoardSnapshot,
|
|
15
|
+
fs: FileSystem.FileSystem,
|
|
16
|
+
) {
|
|
17
|
+
if (yield* fs.exists(`${realRoot}/${MARKER}`).pipe(Effect.mapError((error) => new BoardFailure({ message: error.message })))) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (snapshot.problems.size > 0) {
|
|
21
|
+
yield* Effect.logWarning("Fleet decision closure upgrade deferred because the Board has problems", { problems: snapshot.problems.size });
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const documents = snapshot.documents;
|
|
25
|
+
const latest = latestSequences(documents);
|
|
26
|
+
const superseded = new Set(
|
|
27
|
+
documents.flatMap((document) => {
|
|
28
|
+
const receipt = document.parsed.fields.requestReceipt;
|
|
29
|
+
return receipt?.disposition === "superseded" ? [receipt.question] : [];
|
|
30
|
+
}),
|
|
31
|
+
);
|
|
32
|
+
const questions = new Map(
|
|
33
|
+
documents.flatMap((document) => {
|
|
34
|
+
const question = responses.questionFrom(document);
|
|
35
|
+
return question === undefined ? [] : [[question.question.source, question.id] as const];
|
|
36
|
+
}),
|
|
37
|
+
);
|
|
38
|
+
for (const document of documents) {
|
|
39
|
+
const decision = publishedDecision(document);
|
|
40
|
+
if (decision !== undefined && (decision.sequence < (latest.get(decision.workId) ?? -1) || superseded.has(questions.get(document.file) ?? ""))) {
|
|
41
|
+
const closed = yield* closePublishedDecision(root, realRoot, document);
|
|
42
|
+
if (closed !== undefined) {
|
|
43
|
+
snapshot.record(closed);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
yield* writePublished(root, realRoot, MARKER, '{"version":1}\n', (source) => source === '{"version":1}\n').pipe(
|
|
48
|
+
Effect.mapError((error) => new BoardFailure({ message: error.message })),
|
|
49
|
+
);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
function latestSequences(documents: readonly BoardDocument[]) {
|
|
53
|
+
const latest = new Map<string, number>();
|
|
54
|
+
for (const document of documents) {
|
|
55
|
+
const decision = publishedDecision(document);
|
|
56
|
+
if (decision !== undefined) {
|
|
57
|
+
latest.set(decision.workId, Math.max(latest.get(decision.workId) ?? -1, decision.sequence));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return latest;
|
|
61
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { board as boardApi } from "@shivaedev/work-board/integration/board.ts";
|
|
2
|
-
import { responses } from "@shivaedev/work-board/integration/responses.ts";
|
|
1
|
+
import { board as boardApi } from "@shivaedev/work-board/server/integration/board.ts";
|
|
2
|
+
import { responses } from "@shivaedev/work-board/server/integration/responses.ts";
|
|
3
3
|
import { briefRevision } from "#board/briefRevision.ts";
|
|
4
4
|
|
|
5
5
|
const { revisionOf } = responses;
|
package/src/board/writeHealth.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
|
-
import type { FleetHealth as BoardFleetHealth } from "@shivaedev/work-board/integration/diagnostics.ts";
|
|
3
|
-
import { diagnostics as diagnosticsApi } from "@shivaedev/work-board/integration/diagnostics.ts";
|
|
2
|
+
import type { FleetHealth as BoardFleetHealth } from "@shivaedev/work-board/server/integration/diagnostics.ts";
|
|
3
|
+
import { diagnostics as diagnosticsApi } from "@shivaedev/work-board/server/integration/diagnostics.ts";
|
|
4
4
|
import { writePublished } from "#board/writePublished.ts";
|
|
5
5
|
import { BoardFailure } from "#policy.ts";
|
|
6
6
|
|
|
@@ -4,7 +4,12 @@ import { Effect } from "effect";
|
|
|
4
4
|
import { type ReportDirectory, validateReportDirectory, withReportDirectory } from "#reportFileDirectory.ts";
|
|
5
5
|
import { hasFileCode, ReportFileFailure, reportFileIo, withReportFile } from "#reportFileFailure.ts";
|
|
6
6
|
|
|
7
|
-
function unchanged(
|
|
7
|
+
function unchanged(
|
|
8
|
+
folder: string,
|
|
9
|
+
name: "status.md" | "health.json" | ".fleet-decision-closure-v1.json",
|
|
10
|
+
content: string,
|
|
11
|
+
owns: (source: string) => boolean,
|
|
12
|
+
) {
|
|
8
13
|
const label = `fleet/${name}`;
|
|
9
14
|
return withReportFile(
|
|
10
15
|
label,
|
|
@@ -27,7 +32,7 @@ function unchanged(folder: string, name: "status.md" | "health.json", content: s
|
|
|
27
32
|
const publish = Effect.fnUntraced(function* (
|
|
28
33
|
directory: ReportDirectory,
|
|
29
34
|
target: ReportDirectory,
|
|
30
|
-
name: "status.md" | "health.json",
|
|
35
|
+
name: "status.md" | "health.json" | ".fleet-decision-closure-v1.json",
|
|
31
36
|
content: string,
|
|
32
37
|
owns: (source: string) => boolean,
|
|
33
38
|
) {
|
|
@@ -54,13 +59,17 @@ const publish = Effect.fnUntraced(function* (
|
|
|
54
59
|
export const writePublished = Effect.fn("Fleet.writePublished")(function* (
|
|
55
60
|
root: string,
|
|
56
61
|
realRoot: string,
|
|
57
|
-
name: "status.md" | "health.json",
|
|
62
|
+
name: "status.md" | "health.json" | ".fleet-decision-closure-v1.json",
|
|
58
63
|
content: string,
|
|
59
64
|
owns: (source: string) => boolean,
|
|
60
65
|
) {
|
|
61
|
-
const
|
|
66
|
+
const upgrade = name === ".fleet-decision-closure-v1.json";
|
|
67
|
+
const label = upgrade ? name : `fleet/${name}`;
|
|
62
68
|
return yield* withReportDirectory(label, root, realRoot, (directory) =>
|
|
63
69
|
Effect.gen(function* () {
|
|
70
|
+
if (upgrade) {
|
|
71
|
+
return yield* publish(directory, directory, name, content, owns);
|
|
72
|
+
}
|
|
64
73
|
yield* reportFileIo(label, () => mkdir(`${directory.folder}/fleet`)).pipe(
|
|
65
74
|
Effect.catchTag("ReportFileFailure", (error) => (hasFileCode(error.cause, "EEXIST") ? Effect.void : Effect.fail(error))),
|
|
66
75
|
);
|