@hatiolab/figure-model 0.1.32 → 0.1.34
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/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/sizing.d.ts +11 -0
- package/dist/sizing.d.ts.map +1 -1
- package/dist/sizing.js +8 -4
- package/dist/sizing.js.map +1 -1
- package/dist/v3-asset-types.d.ts +48 -2
- package/dist/v3-asset-types.d.ts.map +1 -1
- package/dist/v3-asset.d.ts.map +1 -1
- package/dist/v3-asset.js +19 -3
- package/dist/v3-asset.js.map +1 -1
- package/dist/v3-capabilities.d.ts.map +1 -1
- package/dist/v3-capabilities.js +13 -1
- package/dist/v3-capabilities.js.map +1 -1
- package/dist/v3-create.js +1 -1
- package/dist/v3-create.js.map +1 -1
- package/dist/v3-driver.d.ts +16 -0
- package/dist/v3-driver.d.ts.map +1 -0
- package/dist/v3-driver.js +145 -0
- package/dist/v3-driver.js.map +1 -0
- package/dist/v3-from-v2.d.ts +116 -0
- package/dist/v3-from-v2.d.ts.map +1 -0
- package/dist/v3-from-v2.js +1203 -0
- package/dist/v3-from-v2.js.map +1 -0
- package/dist/v3-gate.d.ts +38 -0
- package/dist/v3-gate.d.ts.map +1 -0
- package/dist/v3-gate.js +134 -0
- package/dist/v3-gate.js.map +1 -0
- package/dist/v3-graph-types.d.ts +1 -1
- package/dist/v3-graph-types.d.ts.map +1 -1
- package/dist/v3-graph.d.ts +14 -0
- package/dist/v3-graph.d.ts.map +1 -1
- package/dist/v3-graph.js +162 -10
- package/dist/v3-graph.js.map +1 -1
- package/docs/prototypes/v3-asset-samples.mjs +1 -1
- package/docs/prototypes/v3-asset.schema.json +1 -1
- package/docs/v3-asset-persistence.md +3 -1
- package/docs/v3-design.md +3 -0
- package/docs/v3-motion-contract.md +178 -0
- package/docs/v3-operator-contracts.md +5 -0
- package/docs/v3-review-2026-09-22.md +127 -0
- package/docs/v3-status.md +9 -0
- package/package.json +1 -1
|
@@ -75,6 +75,11 @@ args 순서와 output 이름은 버전별 연산 계약이다. 전체 연산 cat
|
|
|
75
75
|
| add@1 | a,b (동일 차원) | value=a+b | overflow/nonfinite |
|
|
76
76
|
| mul@1 | a,b | value=a*b | overflow/nonfinite |
|
|
77
77
|
| div@1 | a,b | value=a/b | b=0, overflow/nonfinite |
|
|
78
|
+
| geomean@1 | a,b[,c] (동일 차원) | value=(a·b[·c])^(1/n) | 음수 입력 |
|
|
79
|
+
| sphere-shape@1 | radiusX,radiusY,radiusZ (길이) | shape(sphere) | 반지름≤0 |
|
|
80
|
+
| polygon-shape@1 | height, x0,z0, x1,z1, … (길이, 점 3개 이상) | shape(polygon; 단면은 X–Z, Y 로 민다) | height≤0, 단면이 한 축으로 퍼지지 않음 |
|
|
81
|
+
| frustum-shape@1 | radiusTop,radiusBottom,height (길이) | shape(frustum; 축은 Y, radiusTop 이 +Y) | height≤0, 반지름 음수, 둘 다 0 |
|
|
82
|
+
| hollow-box@1 | width,height,depth,round,wallX,wallZ,floor (길이) | shape(hollowBox) | 치수≤0, 라운드 범위 밖, 벽이 단면의 절반 이상, 바닥이 높이 이상 |
|
|
78
83
|
| sin@1 | angle | value=sin(angle) | nonfinite |
|
|
79
84
|
| between@1 | low,high,marginLow,marginHigh (길이) | length,center | 음수 여백, length≤0 |
|
|
80
85
|
| box@1 | width,height,depth (길이) | xMin,xMax,yMin,yMax,zMin,zMax | 치수≤0 |
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# V3 평가 — figure 레인, 2026-09-22
|
|
2
|
+
|
|
3
|
+
figure-model 0.1.32 (`54d30c2`) 기준. 문서를 읽고 판단한 것이 아니라 **돌려서 확인한 것**을 적는다.
|
|
4
|
+
확인에 쓴 명령은 항목마다 적어 두었다.
|
|
5
|
+
|
|
6
|
+
## 한 줄
|
|
7
|
+
|
|
8
|
+
**수학은 선다. 전환 경로가 없다.** 커널의 핵심 주장은 실측으로 성립하고 구현도 하나로 모여 있다.
|
|
9
|
+
막는 것은 설계가 아니라 **살아 있는 자산 32 개를 V3 로 옮길 길이 아직 없다**는 것이다.
|
|
10
|
+
|
|
11
|
+
## 1. 선 것 — 확인함
|
|
12
|
+
|
|
13
|
+
### 구현이 하나다
|
|
14
|
+
|
|
15
|
+
프로토타입이 별도 구현을 들고 있지 않다. `docs/prototypes/v3-typed-plan.mjs` 는 세 줄이고
|
|
16
|
+
`src/v3-graph.ts` 를 다시 내보낸다. 실험 143 개가 **제품 소스를 시험하고 있다.**
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
src/v3-*.ts 13 모듈 · 2,266 줄(시험 포함)
|
|
20
|
+
index.ts 10 개를 내보낸다 — compileV3Graph · createV3Asset · …
|
|
21
|
+
npm test 461 통과 · 0 빨강
|
|
22
|
+
node --test docs/prototypes/v3-*.test.mjs 143 통과 · 0 빨강
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 핵심 주장이 실측으로 성립한다
|
|
26
|
+
|
|
27
|
+
설계 §3 은 「고정 topology 안에서 정지 배치는 d 의 아핀함수이고, 반복·수치 최적화가 필요
|
|
28
|
+
없다」고 한다. 컨베이어 표본을 세 길이에서 평가해 확인했다.
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
길이 1800 · 2400 · 3000 에서 f(1800)+f(3000) == 2·f(2400)
|
|
32
|
+
길이에서 파생된 값 120 개 · 비아핀 0 개
|
|
33
|
+
같은 입력 두 번 평가 → 같은 결과
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
순환은 반복해서 풀려 들지 않고 이름을 대고 거절한다.
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
CYCLE: a: a -> b -> a
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
검사 코드가 24 가지다 — `DUPLICATE_WRITER` · `NO_SPACE` · `INPUT_RANGE` · `TOPOLOGY_STATE` 등.
|
|
43
|
+
자유도 소유권(§5)이 코드에 서 있다는 뜻이고, 이것이 v2 의 anchor 조합 탐색과 다른 자리다.
|
|
44
|
+
|
|
45
|
+
### 현황 문서가 정직하다
|
|
46
|
+
|
|
47
|
+
`v3-status.md` 가 격리 UI 의 성공을 제품 배포로 적지 않고, 「소스 455 통과」가 V3 기능 수가
|
|
48
|
+
아니라고 먼저 밝힌다. 오늘 이 집이 여러 번 틀린 자리를 그쪽은 안 틀렸다.
|
|
49
|
+
|
|
50
|
+
## 2. 위험 — 위험 순
|
|
51
|
+
|
|
52
|
+
### ① 전환 경로가 없다. 자산 32 개를 손으로 다시 쓴다
|
|
53
|
+
|
|
54
|
+
**V2 → V3 변환기가 없다.** 이름으로도 동작으로도 찾지 못했다.
|
|
55
|
+
|
|
56
|
+
`v3-cutover.md` 는 「기존 자산도 V3 기준으로 변환하거나 재작성한다」고 적는데, **변환**에
|
|
57
|
+
해당하는 것이 없고 재작성만 있다. 네 대표 자산(드라이룸·컨베이어·로봇암·포크리프트)은
|
|
58
|
+
V2 seed 를 읽어 **결과를 견주는 용도**로 쓰고, V3 쪽은 손으로 적은 그래프다.
|
|
59
|
+
|
|
60
|
+
```js
|
|
61
|
+
// docs/prototypes/v3-full-conveyor.mjs — 컨베이어 하나가 이 밀도로 60 줄
|
|
62
|
+
add('endX','halfLength',-60); add('legX','halfLength',-260); add('frameZ','halfWidth',-18)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
그리고 **되돌아갈 자리도 없다.** 전환 결정으로 figure-ui·figure-service 의 V2/V3 분기
|
|
66
|
+
코드를 이미 지웠다. 활성 자산 32 개가 전부 V2 다.
|
|
67
|
+
|
|
68
|
+
> 이것이 V3 가 나갈지 말지를 정하는 한 가지다. 나머지는 다 그 뒤의 일이다.
|
|
69
|
+
|
|
70
|
+
### ② v2 가 세운 게이트가 V3 로 안 넘어왔다
|
|
71
|
+
|
|
72
|
+
ADR-0044 와 ADR-0051 이 닫은 문 셋이 V3 소스에 없다.
|
|
73
|
+
|
|
74
|
+
| v2 의 문 | V3 소스 | V3 문서 |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| `part-outside-base` (ADR-0044) | 0 | 0 |
|
|
77
|
+
| `parts-off-placement-face` (ADR-0045) | 0 | 0 |
|
|
78
|
+
| `FIGURE_CAPABILITIES` 닫힌 목록 (ADR-0051 ④) | 0 | 0 |
|
|
79
|
+
| 파라미터 `range` | 0 | 1 |
|
|
80
|
+
|
|
81
|
+
`src/v3-capabilities.ts` 는 있지만 **다른 것을 본다** — 표면 소유권과 수용 조건이다. 능력
|
|
82
|
+
이름은 `name()` 이 「빈 문자열이 아니면 통과」로 받는다. **`capabilities: ['hoist']` 가
|
|
83
|
+
V3 에서 다시 지나간다.** 그 구멍은 09-16 에 닫은 것이고, 닫기 전에는 검증과 발행을 지나
|
|
84
|
+
렌더링에서 죽었다.
|
|
85
|
+
|
|
86
|
+
셋 다 「그려지지 않는 것」이라 V3 로 옮기는 동안 조용히 빠지기 쉽다. **화면에는 아무 일도
|
|
87
|
+
안 일어난다.**
|
|
88
|
+
|
|
89
|
+
### ③ 지금 V3 를 저작할 길은 그래프 코드뿐이다
|
|
90
|
+
|
|
91
|
+
`v3-status.md` 의 남은 작업이 「다른 primitive 추가, 삭제·재질·관계 편집」이다. 지금 서 있는
|
|
92
|
+
것은 빈 자산과 상자 하나다. 설계는 모델러와 AI 가 template 으로 이 식을 만든다고 하는데,
|
|
93
|
+
**그 template 이 아직 없다.**
|
|
94
|
+
|
|
95
|
+
①과 겹친다 — 옮길 길도 없고 새로 지을 길도 좁다.
|
|
96
|
+
|
|
97
|
+
### ④ `LengthExpr` 에 가변 길이끼리의 곱이 없다 — 의도한 것이지만 경계다
|
|
98
|
+
|
|
99
|
+
설계 §5 가 두 가변 길이의 곱·나눗셈을 언어에서 뺐다. **그것이 아핀을 지키는 이유**이고
|
|
100
|
+
①의 실측이 성립하는 까닭이라 옳은 제한이다.
|
|
101
|
+
|
|
102
|
+
다만 **면적·부피에 비례하는 규칙은 표현할 수 없다**는 뜻이다. 「바닥 면적에 따라 칸 수」
|
|
103
|
+
같은 것이 나오면 그때가 확장 kernel 을 결정할 자리다. 미리 열지 말고 **경계로 적어 두는
|
|
104
|
+
것**이 맞다.
|
|
105
|
+
|
|
106
|
+
### ⑤ `Dynamic = any` 가 커널 디스패치 전체
|
|
107
|
+
|
|
108
|
+
`src/v3-graph.ts` 에 17 자리다. 저자가 TODO 로 남겼고 현황 문서도 「내부 Dynamic 경계 축소」로
|
|
109
|
+
적어 두었다. 공개 API 는 타입이 있고 경계에서 검사하므로 **부채이지 결함은 아니다.**
|
|
110
|
+
|
|
111
|
+
## 3. 다음 한 걸음
|
|
112
|
+
|
|
113
|
+
①이 나머지를 다 막는다. 그래서 순서는 이것이다.
|
|
114
|
+
|
|
115
|
+
1. **표본 하나로 전환 비용을 잰다.** 컨베이어 하나를 V2 원본에서 V3 로 옮기는 데 사람이 몇
|
|
116
|
+
분 걸리는지. 32 개를 곱하면 이 결정이 바로 보인다. 자동 변환이 어디까지 가능한지도 그때
|
|
117
|
+
드러난다 — `sizing`·`anchor` 의 상당수는 기계적으로 옮길 수 있어 보인다.
|
|
118
|
+
2. **②의 문 셋을 V3 계약에 어떻게 세울지 정한다.** 옮기는 것이 아니라 V3 의 말로 다시
|
|
119
|
+
세워야 한다. 능력 이름은 목록을 그대로 쓸 수 있고, `base` 포함은 V3 의 `NO_SPACE` ·
|
|
120
|
+
`LAYOUT_DOMAIN` 과 겹쳐 보인다.
|
|
121
|
+
3. 그 뒤에 모델러 연결.
|
|
122
|
+
|
|
123
|
+
## 이 평가가 안 본 것
|
|
124
|
+
|
|
125
|
+
- 렌더링 결과의 시각 품질. 브라우저 확인은 저자가 했고 나는 다시 안 봤다.
|
|
126
|
+
- 성능. 자산 500 개 규모에서의 평가 비용은 재지 않았다.
|
|
127
|
+
- `v3-layout-system.md` 의 Flex/Grid 계약. 설계 문서만 있고 실측 안 했다.
|
package/docs/v3-status.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# V3 구현·검증 현황
|
|
2
2
|
|
|
3
|
+
> **2026-09-22 — this file is a progress note, not the document of record.** The decision and the order of work are
|
|
4
|
+
> `operato-application/adr/ADR-0087.md`; the current state is the app's
|
|
5
|
+
> `operato-application/packages/operato-figure/docs/CURRENT_STATUS.md` (section "figure-model V2 → V3"). Where this
|
|
6
|
+
> file disagrees with those two, they win.
|
|
7
|
+
|
|
3
8
|
기준일: 2026-09-21. **현재 상태를 판단하는 문서다.** 개별 연구·검증 문서의 과거 단계 수치나 '다음 단계'보다 이 현황을 우선한다.
|
|
4
9
|
|
|
5
10
|
## 제품 방향
|
|
@@ -39,3 +44,7 @@
|
|
|
39
44
|
5. [V3 단일 전환](v3-cutover.md).
|
|
40
45
|
|
|
41
46
|
다음 작업은 모델러의 사용자 동작·AI·실제 저장·렌더링을 이 공용 V3 구현에 연결하는 것이다. 완료한 계층을 다시 이관하거나 V2 호환 분기를 추가하는 것이 아니다.
|
|
47
|
+
|
|
48
|
+
## 제품 연결 작업 추가 기록 (2026-09-21)
|
|
49
|
+
|
|
50
|
+
things-factory의 `packages/figure-ui/docs/v3-product-cutover.md`에 제품 전환 진행 상태를 기록했다. V3 제품 세션·캔버스·편집 컴포넌트·저장 API와 페이지를 작성했으나, 기본 route는 아직 교체하지 않았다. 로컬 활성 자산32개가 모두 V2이며 자산 전환·AI 도구·발행/소비처 연결이 남아 있다. UI241개 테스트 및 클라이언트/서비스 타입 검사 통과는 V3 제품 end-to-end 검증 완료를 뜻하지 않는다. 운영 DB 데이터 변경이나 배포는 하지 않았다.
|