用户问:为什么编辑一个版本、保存就自动多一个副本?那不是我要的。
旧机制「保存恒新增版本号」改为:
- savePackage:pkg.version 已存在 → **就地写回该版**(号不变、状态不变);
`asNew: true`(新建按钮)或新流程首版才铸新版本号(服务端算,不生效)
- 底线三道,一道不少:
① **在途钉版不可变** —— 该版有未完结工作流(按 (包,版本) 钉定义)→ 409,
一字不落库;「就地覆盖会改掉在途正在读的编排」由这道闸守,不再靠只插不改一刀切
② **生效版必须始终可运行** —— 写回生效版跑闭合闸,不闭合 412 带整份报告;
未生效版画图不检查、随手存
③ **陈旧编辑不复活** —— 流程存在而版本号已被清理 → 409(实测:停在已删旧版上的
标签页发来保存,把老内容静默复活成了新版本;StaleVersionError 拦死)
- store:新增 updatePackageDefinition(只许命中现存版本)+ countPinnedInFlight
- 前端:保存按钮「保存 v{n}」;新建走 asNew;文案全线「新建才长版本」
- 测试:save-package.test 六例(写回/钉版/热改闭合/asNew/防复活/首版);
过程中揪出双 API 进程并存(旧进程霸端口跑旧代码)——已重启归一
实测:改名保存 → 版本列表仍唯一 v4 生效中,名字已写回;八例端到端全绿;
五闸退出码全过(api:check 提交后转绿)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
/**
|
|
* module: process —— 唯一出口。只做 re-export,不写逻辑(编码规范 §10.1)。
|
|
*/
|
|
export type {
|
|
ActivityContractFace,
|
|
AssembleScope,
|
|
Candidate,
|
|
ClosureInput,
|
|
ClosureReport,
|
|
ClosureViolation,
|
|
NodeInstance,
|
|
OwnerSpec,
|
|
ProcessPackage,
|
|
ProcessService,
|
|
ResolveContext,
|
|
Resolution,
|
|
StartWorkflowInput,
|
|
WorkflowRecord,
|
|
WorkflowState,
|
|
} from './contract.ts';
|
|
export { CallInterfaceViolationError, NotClosedError,
|
|
PinnedVersionError, PositionVacantError, StaleVersionError } from './contract.ts';
|
|
|
|
export type {
|
|
ActivityDirectory,
|
|
ApprovalGateway,
|
|
Clock,
|
|
FlowEventPublisher,
|
|
IdGenerator,
|
|
OrgDirectory,
|
|
ProcessStore,
|
|
ReceiptNotifier,
|
|
Sfeel,
|
|
TaskGateway,
|
|
} from './port.ts';
|
|
|
|
export type { ProcessServiceDeps } from './internal/usecase/process-service.ts';
|
|
export { createProcessService } from './internal/usecase/process-service.ts';
|
|
|
|
export {
|
|
advanceOrder,
|
|
assemble,
|
|
dispatchOf,
|
|
rejectRouteOf,
|
|
selectEdges,
|
|
startNodeOf,
|
|
} from './internal/domain/routing.ts';
|
|
|
|
export { checkClosure, closed } from './internal/domain/closure.ts';
|
|
export {
|
|
aggregateWorkflowState,
|
|
FAILURE_DIGESTIONS,
|
|
isDigested,
|
|
nextInstanceNumber,
|
|
resolveOwner,
|
|
} from './internal/domain/owner-resolution.ts';
|
|
|
|
export { createProcessStore } from './internal/adapter/process-store.ts';
|
|
export { nodeInstanceTable, processPackageTable, workflowTable } from './internal/adapter/process-schema.ts';
|