@g1cloud/bpmn-modeler-next 5.0.0-alpha.54 → 5.0.0-alpha.55

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.
@@ -127,6 +127,25 @@ export type GeometryFinding =
127
127
  axis: 'h' | 'v';
128
128
  length: number;
129
129
  }
130
+ /**
131
+ * 두 간선이 같은 선 위를 **같은 방향·같은 종류**로 겹쳐 흐르는데 **끝점을 하나도 공유하지 않는다**
132
+ * (B-77) — 한 선으로 합쳐 보이는데 실은 만난 적이 없고, 공유 구간 끝에서 서로 다른 곳으로 갈라진다.
133
+ * 사용자 증언(재하강 대조, 2026-09-18): *"…본인확인수신에서 나온 선에 합류한다음에 결제실패 종료와
134
+ * 재고할당요청으로 들어가는데 이해가 안되는 상황"*.
135
+ *
136
+ * 🔴 **일곱 번째 표본의 "같은 방향이면 겹쳐도 좋다" 와 모순이 아니다 — 대상이 다르다.** 그때 수용한
137
+ * 것은 **진짜 합류·팬아웃**(소스 또는 타깃을 공유)이고 여기서 잡는 것은 **가짜 합류**다. 판별자는
138
+ * 길이가 아니라 **관계**다(🔁 「양이 안 가르면 대상을 갈라라」). 사람 실무 코퍼스 26종 기저 **0건**.
139
+ *
140
+ * ⚠ **양쪽 `source`·`target` 이 다 알려졌을 때만 판정한다** — 하나라도 모르면 합류와 가를 수 없으므로
141
+ * 침묵한다(오탐보다 침묵 · `throughpass` 와 같은 정책).
142
+ */
143
+ | {
144
+ kind: 'edge-overlap-unrelated';
145
+ edges: [string, string];
146
+ axis: 'h' | 'v';
147
+ length: number;
148
+ }
130
149
  /**
131
150
  * 간선의 **라벨이 다른 간선과 공유하는 구간 위**에 놓여 어느 간선의 라벨인지 읽을 수 없다(확정 6
132
151
  * 다섯 번째 표본에서 사용자가 지목: "겹치는 선상에 있는 분기 문구가 어느 선에 해당하는지 애매").
@@ -417,8 +436,16 @@ export declare function axisSegmentsOf(edge: GeometryEdge): AxisSegment[];
417
436
  export declare function unreadableOverlapOf(a: GeometryEdge, b: GeometryEdge): {
418
437
  axis: 'h' | 'v';
419
438
  length: number;
420
- kind: 'opposite' | 'mixed';
439
+ kind: 'opposite' | 'mixed' | 'unrelated';
421
440
  } | null;
441
+ /**
442
+ * 읽을 수 없는 공선 중첩 **3종**(반대 방향 · 종류 다름 · 무관) 판정인가.
443
+ * 🔴 소비자가 `kind` 목록을 손으로 늘리게 두면 축을 하나 더할 때마다 **조건이 좁은 소비자**가 남는다
444
+ * (🔁 「기존 축의 조건이 좁았다」 — B-19·B-27·B-65·B-71 이 그 클래스다). 늘리는 자리는 여기 하나다.
445
+ */
446
+ export declare function isEdgeOverlapFinding(f: GeometryFinding): f is Extract<GeometryFinding, {
447
+ kind: 'edge-overlap-opposite' | 'edge-overlap-mixed' | 'edge-overlap-unrelated';
448
+ }>;
422
449
  /** 두 간선의 **반대 방향** 공선 중첩(종류 무관). `unreadableOverlapOf` 의 부분집합 — 기존 호출자 호환. */
423
450
  export declare function oppositeOverlapOf(a: GeometryEdge, b: GeometryEdge): {
424
451
  axis: 'h' | 'v';
@@ -8,7 +8,7 @@ export type { DocumentIndex, ElementCategory } from './documentIndex';
8
8
  export { buildRegistryIndex } from './documentIndex';
9
9
  export { validateOps } from './validate';
10
10
  export { lowerOps, resolverServicesOf, type ResolverServices } from './lower';
11
- export { forwardThreePointCandidates, planCrossPoolRoute, planEdgeRepair, planLabelLineClearance, planLabelPlacement, planMiddleSegmentShifts, planOppositeOverlapRepair, planSegmentDetours, planBackEdgeBoundaryClearance, repairIntroducedBoundaryHugging, repairIntroducedCrossings, repairIntroducedOppositeOverlaps, repairIntroducedSharedSegmentLabels, repairIntroducedLabelLines, repairIntroducedShapeLabelLines, planShapeLabelClearance, rerouteIntroducedCrossPoolEdges, } from './routeRepair';
11
+ export { forwardThreePointCandidates, planCrossPoolRoute, planEdgeRepair, planLabelLineClearance, planLabelPlacement, planMiddleSegmentShifts, planOppositeOverlapRepair, planSegmentDetours, planBackEdgeBoundaryClearance, repairIntroducedBoundaryHugging, repairIntroducedCrossings, repairIntroducedFakeMerges, repairIntroducedOppositeOverlaps, repairIntroducedSharedSegmentLabels, repairIntroducedLabelLines, repairIntroducedShapeLabelLines, planShapeLabelClearance, rerouteIntroducedCrossPoolEdges, } from './routeRepair';
12
12
  export interface ApplyBpmnOpsResult {
13
13
  ok: boolean;
14
14
  issues: ResolveIssue[];
@@ -123,10 +123,24 @@ export declare function repairIntroducedBoundaryHugging(services: Pick<ResolverS
123
123
  */
124
124
  export declare function planOppositeOverlapRepair(edge: GeometryEdge, scene: GeometryScene): GeometryPoint[] | null;
125
125
  /**
126
- * 이 배치가 **새로 만든** 읽을 수 없는 중첩(반대 방향 · 종류 다름)을 고친다(하강 직후, undo 에피소드 안).
127
- * 짝 중 새 간선만 손댄다(안전 성질 2). 둘 다 새 것이면 **시퀀스 플로우부터** — 종류 다른 중첩에서 사용자는
128
- * 메시지플로우(중심 도킹)를 두고 시퀀스 쪽을 비켰다(표본 7).
126
+ * 이 간선의 **가짜 합류**(B-77)를 없애는 경로(순수). 못 찾으면 `null`.
127
+ *
128
+ * 🔴 **기존 중첩 보정(`planOppositeOverlapRepair`)과 예산이 다르고, 그래서 패스를 갈랐다.** 거기는
129
+ * 중첩 1 감소에 예산 1 인데 `crossingCost` 는 같은 종류 교차를 **2** 로 세므로(B-18 ⓑ) *"중첩 하나를
130
+ * 없애려고 같은 종류 교차 하나를 받는" 교환이 구조적으로 불가능*하다. 여기서는 그 교환을 허용한다 —
131
+ * 확정 6 이 *"간선 교차는 결함 축이 아니다"*(교차 5·10 반복 수용)인 반면 가짜 합류는 사용자가
132
+ * *"이해가 안되는 상황"* 으로 지목했다(재하강 대조 2026-09-18).
133
+ *
134
+ * ⚠ **이 예산을 기존 보정에 섞는 수단은 실측으로 기각됐다** — `--check` **46건**이 흔들리고
135
+ * g15-edit1 에서는 **없던 반대 중첩이 하나 생겼다**(🔁 「채택 조건에 대가가 없다」). 중간 단계마다
136
+ * 도는 보정에 예산을 주면 파급이 문서 전체로 간다. 🔴 **축이 다르면 조건도 다르다.**
137
+ */
138
+ export declare function planFakeMergeRepair(edge: GeometryEdge, scene: GeometryScene): GeometryPoint[] | null;
139
+ /**
140
+ * 이 배치가 **새로 만든** 가짜 합류(B-77)를 고친다 — 기존 중첩 보정과 **별도 패스**다(예산이 다르다).
141
+ * 짝 중 **새 간선만** 손댄다(안전 성질 2).
129
142
  */
143
+ export declare function repairIntroducedFakeMerges(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeKeys: ReadonlySet<string>, beforeEdgeIds: ReadonlySet<string>): void;
130
144
  export declare function repairIntroducedOppositeOverlaps(services: Pick<ResolverServices, 'elementRegistry' | 'modeling'>, beforeKeys: ReadonlySet<string>, beforeEdgeIds: ReadonlySet<string>): void;
131
145
  /**
132
146
  * 라벨의 새 bounds(순수). 라벨이 공유 구간 위에 없으면 `null`(옮길 이유가 없다). 고유 구간을 못