feat: classify pad ordered pair row
This commit is contained in:
@@ -24,12 +24,12 @@
|
|||||||
],
|
],
|
||||||
"followUpProgress": "config/freecad-follow-up-task-progress.json"
|
"followUpProgress": "config/freecad-follow-up-task-progress.json"
|
||||||
},
|
},
|
||||||
"nextTask": "TSN-PAIR-pad-fuse",
|
"nextTask": "TSN-PAIR-pocket-fuse",
|
||||||
"summary": {
|
"summary": {
|
||||||
"tasks": 1756,
|
"tasks": 1756,
|
||||||
"completed": 204,
|
"completed": 223,
|
||||||
"inProgress": 1,
|
"inProgress": 1,
|
||||||
"pending": 1551
|
"pending": 1532
|
||||||
},
|
},
|
||||||
"milestones": [
|
"milestones": [
|
||||||
{
|
{
|
||||||
@@ -2737,197 +2737,254 @@
|
|||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-fuse",
|
"id": "TSN-PAIR-pad-fuse",
|
||||||
"title": "Classify ordered operation pair pad->fuse",
|
"title": "Classify ordered operation pair pad->fuse",
|
||||||
"status": "in_progress",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->fuse",
|
"pair": "pad->fuse",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-cut",
|
"id": "TSN-PAIR-pad-cut",
|
||||||
"title": "Classify ordered operation pair pad->cut",
|
"title": "Classify ordered operation pair pad->cut",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->cut",
|
"pair": "pad->cut",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-common",
|
"id": "TSN-PAIR-pad-common",
|
||||||
"title": "Classify ordered operation pair pad->common",
|
"title": "Classify ordered operation pair pad->common",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->common",
|
"pair": "pad->common",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-rotate",
|
"id": "TSN-PAIR-pad-rotate",
|
||||||
"title": "Classify ordered operation pair pad->rotate",
|
"title": "Classify ordered operation pair pad->rotate",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->rotate",
|
"pair": "pad->rotate",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-pad",
|
"id": "TSN-PAIR-pad-pad",
|
||||||
"title": "Classify ordered operation pair pad->pad",
|
"title": "Classify ordered operation pair pad->pad",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->pad",
|
"pair": "pad->pad",
|
||||||
|
"classification": "rejected",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builder-and-freecad-profile-reject-with-clean-resave"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-pocket",
|
"id": "TSN-PAIR-pad-pocket",
|
||||||
"title": "Classify ordered operation pair pad->pocket",
|
"title": "Classify ordered operation pair pad->pocket",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->pocket",
|
"pair": "pad->pocket",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-loft",
|
"id": "TSN-PAIR-pad-loft",
|
||||||
"title": "Classify ordered operation pair pad->loft",
|
"title": "Classify ordered operation pair pad->loft",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->loft",
|
"pair": "pad->loft",
|
||||||
|
"classification": "rejected",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"freecad-input-precondition-reject-with-kernel-diagnostic-and-clean-resave"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-pipe",
|
"id": "TSN-PAIR-pad-pipe",
|
||||||
"title": "Classify ordered operation pair pad->pipe",
|
"title": "Classify ordered operation pair pad->pipe",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->pipe",
|
"pair": "pad->pipe",
|
||||||
|
"classification": "rejected",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"freecad-input-precondition-reject-with-kernel-diagnostic-and-clean-resave"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-revolution",
|
"id": "TSN-PAIR-pad-revolution",
|
||||||
"title": "Classify ordered operation pair pad->revolution",
|
"title": "Classify ordered operation pair pad->revolution",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->revolution",
|
"pair": "pad->revolution",
|
||||||
|
"classification": "rejected",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builder-and-freecad-profile-reject-with-clean-resave"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-groove",
|
"id": "TSN-PAIR-pad-groove",
|
||||||
"title": "Classify ordered operation pair pad->groove",
|
"title": "Classify ordered operation pair pad->groove",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->groove",
|
"pair": "pad->groove",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-fillet",
|
"id": "TSN-PAIR-pad-fillet",
|
||||||
"title": "Classify ordered operation pair pad->fillet",
|
"title": "Classify ordered operation pair pad->fillet",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->fillet",
|
"pair": "pad->fillet",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-chamfer",
|
"id": "TSN-PAIR-pad-chamfer",
|
||||||
"title": "Classify ordered operation pair pad->chamfer",
|
"title": "Classify ordered operation pair pad->chamfer",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->chamfer",
|
"pair": "pad->chamfer",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-hole",
|
"id": "TSN-PAIR-pad-hole",
|
||||||
"title": "Classify ordered operation pair pad->hole",
|
"title": "Classify ordered operation pair pad->hole",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->hole",
|
"pair": "pad->hole",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-draft",
|
"id": "TSN-PAIR-pad-draft",
|
||||||
"title": "Classify ordered operation pair pad->draft",
|
"title": "Classify ordered operation pair pad->draft",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->draft",
|
"pair": "pad->draft",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-thickness",
|
"id": "TSN-PAIR-pad-thickness",
|
||||||
"title": "Classify ordered operation pair pad->thickness",
|
"title": "Classify ordered operation pair pad->thickness",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->thickness",
|
"pair": "pad->thickness",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-linear-pattern",
|
"id": "TSN-PAIR-pad-linear-pattern",
|
||||||
"title": "Classify ordered operation pair pad->linear-pattern",
|
"title": "Classify ordered operation pair pad->linear-pattern",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->linear-pattern",
|
"pair": "pad->linear-pattern",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-polar-pattern",
|
"id": "TSN-PAIR-pad-polar-pattern",
|
||||||
"title": "Classify ordered operation pair pad->polar-pattern",
|
"title": "Classify ordered operation pair pad->polar-pattern",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->polar-pattern",
|
"pair": "pad->polar-pattern",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-mirrored",
|
"id": "TSN-PAIR-pad-mirrored",
|
||||||
"title": "Classify ordered operation pair pad->mirrored",
|
"title": "Classify ordered operation pair pad->mirrored",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->mirrored",
|
"pair": "pad->mirrored",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pad-multi-transform",
|
"id": "TSN-PAIR-pad-multi-transform",
|
||||||
"title": "Classify ordered operation pair pad->multi-transform",
|
"title": "Classify ordered operation pair pad->multi-transform",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"dependencies": [
|
"dependencies": [],
|
||||||
"TSN-PROD-DRIFT-001"
|
|
||||||
],
|
|
||||||
"pair": "pad->multi-transform",
|
"pair": "pad->multi-transform",
|
||||||
|
"classification": "accepted",
|
||||||
|
"evidence": [
|
||||||
|
"config/freecad-ordered-operation-pair-classification.json",
|
||||||
|
"native-builders-mutation-naming-and-fcstd-resave-pass"
|
||||||
|
],
|
||||||
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
"exit": "native acceptance or rejection is recorded; accepted pairs include builder, mutation, naming, and resave evidence"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "TSN-PAIR-pocket-fuse",
|
"id": "TSN-PAIR-pocket-fuse",
|
||||||
"title": "Classify ordered operation pair pocket->fuse",
|
"title": "Classify ordered operation pair pocket->fuse",
|
||||||
"status": "pending",
|
"status": "in_progress",
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"TSN-PROD-DRIFT-001"
|
"TSN-PROD-DRIFT-001"
|
||||||
],
|
],
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
生成日期:2026-08-15。基线:FreeCAD 1.1.1 / `0108fd4b4850cc46e625b60e53cea7a7bbe69f8d`。
|
生成日期:2026-08-15。基线:FreeCAD 1.1.1 / `0108fd4b4850cc46e625b60e53cea7a7bbe69f8d`。
|
||||||
|
|
||||||
- 唯一活动任务:`TSN-PAIR-pad-fuse`
|
- 唯一活动任务:`TSN-PAIR-pocket-fuse`
|
||||||
- 微任务:1756 total / 204 completed / 1 in_progress / 1551 pending
|
- 微任务:1756 total / 223 completed / 1 in_progress / 1532 pending
|
||||||
- 有序操作对:78/361 classified / 283 unknown
|
- 有序操作对:97/361 classified / 264 unknown
|
||||||
- Property:27/85 native types / 58 opaque types
|
- Property:27/85 native types / 58 opaque types
|
||||||
- exact 任务:5/52 completed
|
- exact 任务:5/52 completed
|
||||||
- 模块能力:0 exact / 26 compatible / 5 proxy / 3 development
|
- 模块能力:0 exact / 26 compatible / 5 proxy / 3 development
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
| `ORA-GUI-BASELINE` | 106 | 106 | 0 | 0 | `-` |
|
| `ORA-GUI-BASELINE` | 106 | 106 | 0 | 0 | `-` |
|
||||||
| `ORA-GUI-WORKFLOWS` | 7 | 7 | 0 | 0 | `-` |
|
| `ORA-GUI-WORKFLOWS` | 7 | 7 | 0 | 0 | `-` |
|
||||||
| `TSN-RECOVERY-DRIFT` | 13 | 13 | 0 | 0 | `-` |
|
| `TSN-RECOVERY-DRIFT` | 13 | 13 | 0 | 0 | `-` |
|
||||||
| `TSN-ORDERED-PAIRS` | 361 | 78 | 1 | 282 | `TSN-PAIR-pad-fuse` |
|
| `TSN-ORDERED-PAIRS` | 361 | 97 | 1 | 263 | `TSN-PAIR-pocket-fuse` |
|
||||||
| `PROPERTY-CODECS` | 522 | 0 | 0 | 522 | `-` |
|
| `PROPERTY-CODECS` | 522 | 0 | 0 | 522 | `-` |
|
||||||
| `DOCUMENT-SEMANTICS` | 90 | 0 | 0 | 90 | `-` |
|
| `DOCUMENT-SEMANTICS` | 90 | 0 | 0 | 90 | `-` |
|
||||||
| `CORE-MODELING` | 171 | 0 | 0 | 171 | `-` |
|
| `CORE-MODELING` | 171 | 0 | 0 | 171 | `-` |
|
||||||
|
|||||||
@@ -92,6 +92,25 @@ const expectedPairs = [
|
|||||||
{ pair: 'rotate->polar-pattern', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepBuilderAPI_Transform', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse', secondInputCount: 1, mutationParameter: 'angle', mutationTrajectory: [30, 45, 30] },
|
{ pair: 'rotate->polar-pattern', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepBuilderAPI_Transform', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse', secondInputCount: 1, mutationParameter: 'angle', mutationTrajectory: [30, 45, 30] },
|
||||||
{ pair: 'rotate->mirrored', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepBuilderAPI_Transform', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse', secondInputCount: 1, mutationParameter: 'planeOriginX', mutationTrajectory: [5, 6, 5] },
|
{ pair: 'rotate->mirrored', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepBuilderAPI_Transform', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse', secondInputCount: 1, mutationParameter: 'planeOriginX', mutationTrajectory: [5, 6, 5] },
|
||||||
{ pair: 'rotate->multi-transform', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepBuilderAPI_Transform', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)', secondInputCount: 1, mutationParameter: 'multiTranslationX', mutationTrajectory: [8, 9, 8] },
|
{ pair: 'rotate->multi-transform', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepBuilderAPI_Transform', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)', secondInputCount: 1, mutationParameter: 'multiTranslationX', mutationTrajectory: [8, 9, 8] },
|
||||||
|
{ pair: 'pad->fuse', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepAlgoAPI_Fuse', secondInputCount: 2, mutationParameter: 'toolOffsetX', mutationTrajectory: [8, 7, 8] },
|
||||||
|
{ pair: 'pad->cut', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepAlgoAPI_Cut', secondInputCount: 2, mutationParameter: 'toolSize', mutationTrajectory: [4, 3, 4] },
|
||||||
|
{ pair: 'pad->common', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepAlgoAPI_Common', secondInputCount: 2, mutationParameter: 'toolOffsetX', mutationTrajectory: [7, 6, 7] },
|
||||||
|
{ pair: 'pad->rotate', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform', secondInputCount: 1, mutationParameter: 'angle', mutationTrajectory: [15, 22.5, 15] },
|
||||||
|
{ pair: 'pad->pad', decision: 'rejected', reasonCode: 'native-builder-and-freecad-profile-reject-with-clean-resave', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, rejectionAuthority: 'occt-builder', secondBuilder: 'BRepPrimAPI_MakePrism', secondInputCount: 1, mutationParameter: 'length', mutationTrajectory: [5, 7.5, 5], nativeTypeId: 'PartDesign::Pad', freeCadDiagnostic: 'FeatureExtrusion: Length: Could not extrude the sketch!' },
|
||||||
|
{ pair: 'pad->pocket', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut', secondInputCount: 2, mutationParameter: 'length', mutationTrajectory: [5, 4, 5] },
|
||||||
|
{ pair: 'pad->loft', decision: 'rejected', reasonCode: 'freecad-input-precondition-reject-with-kernel-diagnostic-and-clean-resave', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, rejectionAuthority: 'freecad-document', kernelOutcome: 'accepted', secondBuilder: 'BRepOffsetAPI_ThruSections', secondInputCount: 2, mutationParameter: 'ruled', mutationTrajectory: [false, true, false], nativeTypeId: 'Part::Loft', freeCadDiagnostic: 'Profile shape is not a single vertex, edge, wire nor face.' },
|
||||||
|
{ pair: 'pad->pipe', decision: 'rejected', reasonCode: 'freecad-input-precondition-reject-with-kernel-diagnostic-and-clean-resave', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, rejectionAuthority: 'freecad-document', kernelOutcome: 'accepted', secondBuilder: 'BRepOffsetAPI_MakePipe', secondInputCount: 2, mutationParameter: 'spineLength', mutationTrajectory: [15, 12, 15], nativeTypeId: 'Part::Sweep', freeCadDiagnostic: 'A fatal error occurred when making the sweep' },
|
||||||
|
{ pair: 'pad->revolution', decision: 'rejected', reasonCode: 'native-builder-and-freecad-profile-reject-with-clean-resave', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, rejectionAuthority: 'occt-builder', secondBuilder: 'BRepPrimAPI_MakeRevol', secondInputCount: 1, mutationParameter: 'angle', mutationTrajectory: [360, 270, 360], nativeTypeId: 'Part::Revolution', freeCadDiagnostic: 'Solids are not Processed' },
|
||||||
|
{ pair: 'pad->groove', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut', secondInputCount: 2, mutationParameter: 'angle', mutationTrajectory: [360, 180, 360] },
|
||||||
|
{ pair: 'pad->fillet', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepFilletAPI_MakeFillet', secondInputCount: 1, mutationParameter: 'radius', mutationTrajectory: [0.4, 0.6, 0.4] },
|
||||||
|
{ pair: 'pad->chamfer', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepFilletAPI_MakeChamfer', secondInputCount: 1, mutationParameter: 'distance', mutationTrajectory: [0.4, 0.6, 0.4] },
|
||||||
|
{ pair: 'pad->hole', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut', secondInputCount: 1, mutationParameter: 'radius', mutationTrajectory: [1, 1.5, 1] },
|
||||||
|
{ pair: 'pad->draft', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepOffsetAPI_DraftAngle', secondInputCount: 1, mutationParameter: 'angle', mutationTrajectory: [5, 8, 5] },
|
||||||
|
{ pair: 'pad->thickness', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepOffsetAPI_MakeThickSolid', secondInputCount: 1, mutationParameter: 'offset', mutationTrajectory: [-0.4, -0.6, -0.4] },
|
||||||
|
{ pair: 'pad->linear-pattern', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse', secondInputCount: 1, mutationParameter: 'translationX', mutationTrajectory: [8, 9, 8] },
|
||||||
|
{ pair: 'pad->polar-pattern', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse', secondInputCount: 1, mutationParameter: 'angle', mutationTrajectory: [30, 45, 30] },
|
||||||
|
{ pair: 'pad->mirrored', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse', secondInputCount: 1, mutationParameter: 'planeOriginX', mutationTrajectory: [5, 6, 5] },
|
||||||
|
{ pair: 'pad->multi-transform', decision: 'accepted', reasonCode: 'native-builders-mutation-naming-and-fcstd-resave-pass', firstBuilder: 'BRepPrimAPI_MakePrism', firstInputCount: 1, secondBuilder: 'BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse(ordered)', secondInputCount: 1, mutationParameter: 'multiTranslationX', mutationTrajectory: [8, 9, 8] },
|
||||||
]
|
]
|
||||||
if (report.nativeProbe?.artifacts?.length !== 3 || report.classifications?.length !== expectedPairs.length) fail('native artifacts or classification prefix is incomplete.')
|
if (report.nativeProbe?.artifacts?.length !== 3 || report.classifications?.length !== expectedPairs.length) fail('native artifacts or classification prefix is incomplete.')
|
||||||
for (const [index, entry] of report.classifications.entries()) {
|
for (const [index, entry] of report.classifications.entries()) {
|
||||||
@@ -134,6 +153,6 @@ for (const [index, entry] of report.classifications.entries()) {
|
|||||||
const phases = entry.persistence.phases
|
const phases = entry.persistence.phases
|
||||||
if (JSON.stringify(phases?.initial) !== JSON.stringify(phases?.reopened) || JSON.stringify(phases?.initial) !== JSON.stringify(phases?.resaved) || phases.initial.namingEvidenceSha256 !== entry.second.namingEvidenceSha256) fail(`${expected.pair} FCStd phases changed Shape or naming evidence.`)
|
if (JSON.stringify(phases?.initial) !== JSON.stringify(phases?.reopened) || JSON.stringify(phases?.initial) !== JSON.stringify(phases?.resaved) || phases.initial.namingEvidenceSha256 !== entry.second.namingEvidenceSha256) fail(`${expected.pair} FCStd phases changed Shape or naming evidence.`)
|
||||||
}
|
}
|
||||||
const expectedSummary = { registeredOperations: 19, orderedPairs: 361, classifiedPairs: 74, accepted: 58, rejected: 16, unknown: 287 }
|
const expectedSummary = { registeredOperations: 19, orderedPairs: 361, classifiedPairs: 93, accepted: 73, rejected: 20, unknown: 268 }
|
||||||
if (JSON.stringify(report.summary) !== JSON.stringify(expectedSummary)) fail('summary is inconsistent.')
|
if (JSON.stringify(report.summary) !== JSON.stringify(expectedSummary)) fail('summary is inconsistent.')
|
||||||
console.log(JSON.stringify({ status: 'freecad-ordered-operation-pair-classification-pass', completedTasks: report.classifications.map(({ taskId }) => taskId), pairs: report.classifications.map(({ pair, classification }) => ({ pair, classification })), nativeBuilderRuns: report.classifications.length * 4, fcstdPhases: report.classifications.length * 3, remainingPairs: report.summary.unknown }, null, 2))
|
console.log(JSON.stringify({ status: 'freecad-ordered-operation-pair-classification-pass', completedTasks: report.classifications.map(({ taskId }) => taskId), pairs: report.classifications.map(({ pair, classification }) => ({ pair, classification })), nativeBuilderRuns: report.classifications.length * 4, fcstdPhases: report.classifications.length * 3, remainingPairs: report.summary.unknown }, null, 2))
|
||||||
|
|||||||
@@ -53,11 +53,12 @@ def phase_snapshot(document):
|
|||||||
|
|
||||||
|
|
||||||
def document_snapshot(document):
|
def document_snapshot(document):
|
||||||
|
datum_types = {"App::Line", "App::Plane", "App::Point"}
|
||||||
return {
|
return {
|
||||||
"objects": [{
|
"objects": [{
|
||||||
"name": obj.Name,
|
"name": obj.Name,
|
||||||
"typeId": obj.TypeId,
|
"typeId": obj.TypeId,
|
||||||
**({"shape": shape_snapshot(obj)} if hasattr(obj, "Shape") and not obj.Shape.isNull() else {}),
|
**({"shape": shape_snapshot(obj)} if obj.TypeId not in datum_types and hasattr(obj, "Shape") and not obj.Shape.isNull() else {}),
|
||||||
} for obj in document.Objects],
|
} for obj in document.Objects],
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,13 +145,11 @@ def collect_rejected():
|
|||||||
Import.insert(step_path, document.Name)
|
Import.insert(step_path, document.Name)
|
||||||
document.recompute()
|
document.recompute()
|
||||||
source_objects = [obj for obj in document.Objects if hasattr(obj, "Shape") and not obj.Shape.isNull()]
|
source_objects = [obj for obj in document.Objects if hasattr(obj, "Shape") and not obj.Shape.isNull()]
|
||||||
if len(source_objects) != 1:
|
solid_sources = [obj for obj in source_objects if obj.TypeId == "Part::Feature" and obj.Shape.isValid() and len(obj.Shape.Solids) == 1]
|
||||||
raise RuntimeError("Fuse STEP import must produce exactly one Shape object")
|
if len(solid_sources) != 1:
|
||||||
source = source_objects[0]
|
candidates = [{"name": obj.Name, "typeId": obj.TypeId, "shape": shape_snapshot_from_shape(obj.Shape)} for obj in solid_sources]
|
||||||
if len(source.Shape.Solids) != 1:
|
raise RuntimeError("Rejected-pair STEP import must produce exactly one valid single-Solid source: " + json.dumps(candidates, sort_keys=True))
|
||||||
raise RuntimeError("Fuse STEP import did not produce one Solid")
|
source = solid_sources[0]
|
||||||
if source.Shape.isNull():
|
|
||||||
raise RuntimeError("STEP import produced no Shape")
|
|
||||||
source_name = source.Name
|
source_name = source.Name
|
||||||
source_type_id = source.TypeId
|
source_type_id = source.TypeId
|
||||||
document.UndoMode = 1
|
document.UndoMode = 1
|
||||||
|
|||||||
@@ -77,6 +77,9 @@ const pairSpecOverrides = {
|
|||||||
'rotate->fuse': { ...operationSpecs.fuse, nominal: { toolSize: 5, toolOffset: 8 }, edited: { toolSize: 5, toolOffset: 7 }, beforeValue: 8, editedValue: 7 },
|
'rotate->fuse': { ...operationSpecs.fuse, nominal: { toolSize: 5, toolOffset: 8 }, edited: { toolSize: 5, toolOffset: 7 }, beforeValue: 8, editedValue: 7 },
|
||||||
'rotate->common': { ...operationSpecs.common, nominal: { toolSize: 5, toolOffset: 7 }, edited: { toolSize: 5, toolOffset: 6 }, beforeValue: 7, editedValue: 6 },
|
'rotate->common': { ...operationSpecs.common, nominal: { toolSize: 5, toolOffset: 7 }, edited: { toolSize: 5, toolOffset: 6 }, beforeValue: 7, editedValue: 6 },
|
||||||
'rotate->pipe': { ...operationSpecs.pipe, kernelOutcome: 'accepted' },
|
'rotate->pipe': { ...operationSpecs.pipe, kernelOutcome: 'accepted' },
|
||||||
|
'pad->fuse': { ...operationSpecs.fuse, nominal: { toolSize: 5, toolOffset: 8 }, edited: { toolSize: 5, toolOffset: 7 }, beforeValue: 8, editedValue: 7 },
|
||||||
|
'pad->common': { ...operationSpecs.common, nominal: { toolSize: 5, toolOffset: 7 }, edited: { toolSize: 5, toolOffset: 6 }, beforeValue: 7, editedValue: 6 },
|
||||||
|
'pad->pipe': { ...operationSpecs.pipe, kernelOutcome: 'accepted' },
|
||||||
}
|
}
|
||||||
|
|
||||||
const createOperation = (module, { operation, objectStep, toolSize, toolOffset, angle, length, ruled, spineLength, radius, distance, depth, position, direction, faceIndex, axisOrigin, neutralPlaneDirection, reversed, offset, intersectionJoin, translationX, planeOriginX, multiTranslationX, stage }) => {
|
const createOperation = (module, { operation, objectStep, toolSize, toolOffset, angle, length, ruled, spineLength, radius, distance, depth, position, direction, faceIndex, axisOrigin, neutralPlaneDirection, reversed, offset, intersectionJoin, translationX, planeOriginX, multiTranslationX, stage }) => {
|
||||||
@@ -294,6 +297,8 @@ const classifyPair = async (fromOperation, toOperation, pairIndex) => {
|
|||||||
: { toolSize: 5, toolOffset: 8 }
|
: { toolSize: 5, toolOffset: 8 }
|
||||||
: fromOperation === 'common'
|
: fromOperation === 'common'
|
||||||
? { toolSize: 5, toolOffset: 4 }
|
? { toolSize: 5, toolOffset: 4 }
|
||||||
|
: fromOperation === 'pad'
|
||||||
|
? { ...operationSpecs.pad.nominal, objectStep: shapeStep(module, 'makeRectangleFace', 10, 10) }
|
||||||
: operationSpecs[fromOperation].nominal
|
: operationSpecs[fromOperation].nominal
|
||||||
const first = captureStage(module, {
|
const first = captureStage(module, {
|
||||||
operation: fromOperation, ...firstParameters,
|
operation: fromOperation, ...firstParameters,
|
||||||
@@ -367,7 +372,7 @@ const classifyPair = async (fromOperation, toOperation, pairIndex) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const operations = ['fuse', 'cut', 'common', 'rotate', 'pad', 'pocket', 'loft', 'pipe', 'revolution', 'groove', 'fillet', 'chamfer', 'hole', 'draft', 'thickness', 'linear-pattern', 'polar-pattern', 'mirrored', 'multi-transform']
|
const operations = ['fuse', 'cut', 'common', 'rotate', 'pad', 'pocket', 'loft', 'pipe', 'revolution', 'groove', 'fillet', 'chamfer', 'hole', 'draft', 'thickness', 'linear-pattern', 'polar-pattern', 'mirrored', 'multi-transform']
|
||||||
const orderedPairPrefix = [...operations.map((toOperation) => ['fuse', toOperation]), ['cut', 'fuse'], ['cut', 'cut'], ['cut', 'common'], ['cut', 'pad'], ['cut', 'pocket'], ['cut', 'loft'], ['cut', 'pipe'], ['cut', 'revolution'], ['cut', 'groove'], ['cut', 'fillet'], ['cut', 'chamfer'], ['cut', 'hole'], ['cut', 'draft'], ['cut', 'thickness'], ['cut', 'linear-pattern'], ['cut', 'polar-pattern'], ['cut', 'mirrored'], ['cut', 'multi-transform'], ['common', 'fuse'], ['common', 'cut'], ['common', 'common'], ['common', 'rotate'], ['common', 'pad'], ['common', 'pocket'], ['common', 'loft'], ['common', 'pipe'], ['common', 'revolution'], ['common', 'groove'], ['common', 'fillet'], ['common', 'chamfer'], ['common', 'hole'], ['common', 'draft'], ['common', 'thickness'], ['common', 'linear-pattern'], ['common', 'polar-pattern'], ['common', 'mirrored'], ['common', 'multi-transform'], ['rotate', 'fuse'], ['rotate', 'cut'], ['rotate', 'common'], ['rotate', 'rotate'], ['rotate', 'pad'], ['rotate', 'pocket'], ['rotate', 'loft'], ['rotate', 'pipe'], ['rotate', 'revolution'], ['rotate', 'groove'], ['rotate', 'chamfer'], ['rotate', 'hole'], ['rotate', 'draft'], ['rotate', 'thickness'], ['rotate', 'linear-pattern'], ['rotate', 'polar-pattern'], ['rotate', 'mirrored'], ['rotate', 'multi-transform']]
|
const orderedPairPrefix = [...operations.map((toOperation) => ['fuse', toOperation]), ['cut', 'fuse'], ['cut', 'cut'], ['cut', 'common'], ['cut', 'pad'], ['cut', 'pocket'], ['cut', 'loft'], ['cut', 'pipe'], ['cut', 'revolution'], ['cut', 'groove'], ['cut', 'fillet'], ['cut', 'chamfer'], ['cut', 'hole'], ['cut', 'draft'], ['cut', 'thickness'], ['cut', 'linear-pattern'], ['cut', 'polar-pattern'], ['cut', 'mirrored'], ['cut', 'multi-transform'], ['common', 'fuse'], ['common', 'cut'], ['common', 'common'], ['common', 'rotate'], ['common', 'pad'], ['common', 'pocket'], ['common', 'loft'], ['common', 'pipe'], ['common', 'revolution'], ['common', 'groove'], ['common', 'fillet'], ['common', 'chamfer'], ['common', 'hole'], ['common', 'draft'], ['common', 'thickness'], ['common', 'linear-pattern'], ['common', 'polar-pattern'], ['common', 'mirrored'], ['common', 'multi-transform'], ['rotate', 'fuse'], ['rotate', 'cut'], ['rotate', 'common'], ['rotate', 'rotate'], ['rotate', 'pad'], ['rotate', 'pocket'], ['rotate', 'loft'], ['rotate', 'pipe'], ['rotate', 'revolution'], ['rotate', 'groove'], ['rotate', 'chamfer'], ['rotate', 'hole'], ['rotate', 'draft'], ['rotate', 'thickness'], ['rotate', 'linear-pattern'], ['rotate', 'polar-pattern'], ['rotate', 'mirrored'], ['rotate', 'multi-transform'], ['pad', 'fuse'], ['pad', 'cut'], ['pad', 'common'], ['pad', 'rotate'], ['pad', 'pad'], ['pad', 'pocket'], ['pad', 'loft'], ['pad', 'pipe'], ['pad', 'revolution'], ['pad', 'groove'], ['pad', 'fillet'], ['pad', 'chamfer'], ['pad', 'hole'], ['pad', 'draft'], ['pad', 'thickness'], ['pad', 'linear-pattern'], ['pad', 'polar-pattern'], ['pad', 'mirrored'], ['pad', 'multi-transform']]
|
||||||
const classifications = []
|
const classifications = []
|
||||||
for (const [index, [fromOperation, toOperation]] of orderedPairPrefix.entries()) classifications.push(await classifyPair(fromOperation, toOperation, index))
|
for (const [index, [fromOperation, toOperation]] of orderedPairPrefix.entries()) classifications.push(await classifyPair(fromOperation, toOperation, index))
|
||||||
|
|
||||||
|
|||||||
225
后续工作.txt
225
后续工作.txt
@@ -861,4 +861,229 @@ git diff --check
|
|||||||
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
- focused ordered-pair gate 已锁定 ordered builder、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
|
- focused ordered-pair gate 已锁定 ordered builder、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-fuse`
|
||||||
|
|
||||||
|
`pad->fuse` 已完成原生接受分类,并建立 Pad 起始行的真实 Profile 基线:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history,未复用 Solid-as-profile 拒绝输入。
|
||||||
|
- 下游使用真实 `BRepAlgoAPI_Fuse` 双输入 builder,对 Pad 结果执行布尔并集。
|
||||||
|
- 默认工具 X 偏移 `12` 会产生分离实体,未被误记为接受;改用保持实体交叠的 `8 -> 7 -> 8` 专用轨迹。
|
||||||
|
- 工具偏移轨迹使体积在 `575 -> 550 -> 575` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 57 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、两阶段 builder、专用变异轨迹、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-cut`
|
||||||
|
|
||||||
|
`pad->cut` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepAlgoAPI_Cut` 双输入 builder,对 Pad 结果执行布尔减料。
|
||||||
|
- `4 -> 3 -> 4` 工具尺寸轨迹改变体积与面积,体积在 `436 -> 473 -> 436` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 22 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、双输入减料、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-common`
|
||||||
|
|
||||||
|
`pad->common` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepAlgoAPI_Common` 双输入 builder,对 Pad 结果执行布尔交集。
|
||||||
|
- 默认工具 X 偏移 `10` 仅与 Pad 边界相切且没有实体交集,未被误记为接受;改用 `7 -> 6 -> 7` 专用轨迹。
|
||||||
|
- 工具偏移轨迹使交集体积在 `75 -> 100 -> 75` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 117 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、专用交叠轨迹、双输入 builder、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-rotate`
|
||||||
|
|
||||||
|
`pad->rotate` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepBuilderAPI_Transform` 单输入 builder,对 Pad 结果执行刚性旋转。
|
||||||
|
- `15 -> 22.5 -> 15` 角度轨迹保持体积 `500` 和拓扑不变,但明确改变世界空间边界,未因体积不变而误判为无变异。
|
||||||
|
- 名义与恢复态均包含 78 条原生 history,并精确恢复摘要和语义 naming。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、两阶段 builder、边界变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-pad`
|
||||||
|
|
||||||
|
`pad->pad` 已完成原生拒绝分类,并补齐 Pad STEP 聚合结构的拒绝重放规则:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- OCCT `BRepPrimAPI_MakePrism` 在 `5 -> 7.5 -> 5` 长度轨迹中稳定拒绝第一个 Pad 的 Solid 输入,三次均在 builder 阶段传输原生 C++ 异常,且不产生结果 Shape 或 history。
|
||||||
|
- FreeCAD STEP 导入保留 `App::Part` 聚合容器,并唯一选择有效单 Solid 的 `Part::Feature` 叶节点作为 Profile;零个或多个实体叶节点仍 fail-closed。
|
||||||
|
- FreeCAD `PartDesign::Pad` 返回 `FeatureExtrusion: Length: Could not extrude the sketch!`,结果 Shape 为空且状态包含 `Invalid`。
|
||||||
|
- transaction abort 后 10 个导入结构/基准对象、源实体 BREP 与对象集完整恢复;无穷参考线面只比较对象语义,实体 Shape 仍逐字段比较。
|
||||||
|
- 干净 FCStd save/reopen/resave 三阶段一致,拒绝任务没有伪造下游 naming 或变异证据。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile 上游、异常传输、STEP 叶节点选择、精确诊断、回滚和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-pocket`
|
||||||
|
|
||||||
|
`pad->pocket` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `2x3` Face Profile 和 `BRepPrimAPI_MakePrism+BRepAlgoAPI_Cut` 双输入 builder,对 Pad 结果执行减料拉伸。
|
||||||
|
- `5 -> 4 -> 5` 深度轨迹改变体积、面积与拓扑,体积在 `470 -> 476 -> 470` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 64 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实上游/下游 Profile、双输入减料、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-loft`
|
||||||
|
|
||||||
|
`pad->loft` 已完成原生拒绝分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- OCCT `BRepOffsetAPI_ThruSections` 在 `false -> true -> false` ruled 轨迹中均生成体积 `655` 的有效单 Solid 和 24 条 history,但该结果仅记为 kernel-superset 诊断。
|
||||||
|
- FreeCAD `Part::Loft` 对 Pad Solid section 返回 `Profile shape is not a single vertex, edge, wire nor face.`。
|
||||||
|
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
|
||||||
|
- transaction abort 后 STEP 聚合结构、对象集与 Pad 源实体 BREP 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
|
||||||
|
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 超集诊断、STEP 叶节点选择、精确失败信息、回滚和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-pipe`
|
||||||
|
|
||||||
|
`pad->pipe` 已完成原生拒绝分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- OCCT `BRepOffsetAPI_MakePipe` 在 `15 -> 12 -> 15` spine 长度轨迹中生成体积 `1500 -> 1200 -> 1500` 的有效单 Solid 和 28 条 history,但该结果仅记为 kernel-superset 诊断。
|
||||||
|
- FreeCAD `Part::Sweep` 对 Pad Solid section 返回 `A fatal error occurred when making the sweep`。
|
||||||
|
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
|
||||||
|
- transaction abort 后 STEP 聚合结构、对象集与 Pad 源实体 BREP 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
|
||||||
|
- focused ordered-pair gate 已锁定 FreeCAD 决策权、OCCT 超集诊断、STEP 叶节点选择、精确失败信息、回滚和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-revolution`
|
||||||
|
|
||||||
|
`pad->revolution` 已完成原生拒绝分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- OCCT `BRepPrimAPI_MakeRevol` 在 `360 -> 270 -> 360` 角度轨迹中稳定拒绝 Pad Solid 输入,三次均在 builder 阶段传输原生 C++ 异常,且不产生结果 Shape 或 history。
|
||||||
|
- FreeCAD `Part::Revolution` 使用同一 Pad Solid 作为 Source,返回 `Solids are not Processed`。
|
||||||
|
- FreeCAD 结果 Shape 为空、状态包含 `Invalid`,拒绝任务没有伪造下游 naming 或变异证据。
|
||||||
|
- transaction abort 后 STEP 聚合结构、对象集与 Pad 源实体 BREP 完整恢复,干净 FCStd save/reopen/resave 三阶段一致。
|
||||||
|
- focused ordered-pair gate 已锁定异常传输、STEP 叶节点选择、精确诊断、回滚和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-groove`
|
||||||
|
|
||||||
|
`pad->groove` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实旋转轮廓和 `BRepPrimAPI_MakeRevol+BRepAlgoAPI_Cut` 双输入 builder,对 Pad 结果执行旋转槽减料。
|
||||||
|
- `360 -> 180 -> 360` 角度轨迹改变体积与拓扑:名义态体积为 `495.287611`、10 Face,编辑态体积为 `500`、7 Face,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 18 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、双输入旋转减料、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-fillet`
|
||||||
|
|
||||||
|
`pad->fillet` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepFilletAPI_MakeFillet` 单输入 builder,对 Pad 结果的锁定原生边执行倒圆。
|
||||||
|
- `0.4 -> 0.6 -> 0.4` 半径轨迹改变体积与面积,体积在 `496.6520816 -> 492.5636085 -> 496.6520816` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 150 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、原生边选择、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-chamfer`
|
||||||
|
|
||||||
|
`pad->chamfer` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepFilletAPI_MakeChamfer` 单输入 builder,对 Pad 结果的锁定原生边执行倒角。
|
||||||
|
- `0.4 -> 0.6 -> 0.4` 距离轨迹改变体积与面积,体积在 `492.3413333 -> 483.152 -> 492.3413333` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 150 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、原生边选择、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-hole`
|
||||||
|
|
||||||
|
`pad->hole` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepPrimAPI_MakeCylinder+BRepAlgoAPI_Cut` 单输入 builder,以锁定位置和方向的圆柱刀具贯穿 Pad 结果。
|
||||||
|
- `1 -> 1.5 -> 1` 半径轨迹改变体积与面积,体积在 `484.2920367 -> 464.6570826 -> 484.2920367` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 23 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、圆柱减料、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-draft`
|
||||||
|
|
||||||
|
`pad->draft` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepOffsetAPI_DraftAngle` 单输入 builder,对 Pad 结果的锁定原生 Face 执行拔模。
|
||||||
|
- `5 -> 8 -> 5` 角度轨迹改变体积与面积,体积在 `489.0639171 -> 482.4323957 -> 489.0639171` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 5 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、原生 Face 选择、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-thickness`
|
||||||
|
|
||||||
|
`pad->thickness` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepOffsetAPI_MakeThickSolid` 单输入 builder,对 Pad 结果的锁定原生 Face 执行厚壳。
|
||||||
|
- `-0.4 -> -0.6 -> -0.4` offset 轨迹改变体积与面积,体积在 `129.056 -> 185.664 -> 129.056` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 38 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、原生 Face 选择、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-linear-pattern`
|
||||||
|
|
||||||
|
`pad->linear-pattern` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder,将 Pad 结果沿 X 方向平移复制并融合为一个可追踪 Solid。
|
||||||
|
- `8 -> 9 -> 8` 平移轨迹保持实例交叠,体积在 `900 -> 950 -> 900` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 66 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-polar-pattern`
|
||||||
|
|
||||||
|
`pad->polar-pattern` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder,将 Pad 结果绕锁定 Z 轴旋转复制并融合。
|
||||||
|
- `30 -> 45 -> 30` 角度轨迹改变体积、面积与边界,体积在 `711.3248654 -> 792.8932188 -> 711.3248654` 间变化,并精确恢复名义摘要、history 与语义 naming。
|
||||||
|
- 名义结果为有效 1 Solid,包含 78 条原生 history 记录。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、旋转实例融合、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-mirrored`
|
||||||
|
|
||||||
|
`pad->mirrored` 已完成原生接受分类:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用真实 `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder,将 Pad 结果绕锁定平面镜像复制并融合。
|
||||||
|
- 名义 X=5 镜像与对称 Pad 本体完全重合,但仍保留 156 条原生 history;`5 -> 6 -> 5` 轨迹在编辑态产生体积 `600`、14 Face 的单 Solid。
|
||||||
|
- 恢复态精确返回体积 `500`、6 Face 的名义摘要、history 与语义 naming。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、完全重合名义态、镜像实例融合、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
|
### `TSN-PAIR-pad-multi-transform`
|
||||||
|
|
||||||
|
`pad->multi-transform` 已完成原生接受分类,并闭合 Pad 起始行的全部 19 个有序操作对:
|
||||||
|
|
||||||
|
- 上游使用真实 `10x10` Face Profile 和 `BRepPrimAPI_MakePrism` 单输入 builder,拉伸出体积 `500` 的有效单 Solid 和 25 条原生 history。
|
||||||
|
- 下游使用 ordered `BRepBuilderAPI_Transform+BRepAlgoAPI_Fuse` builder,先执行 X 平移,再镜像平移结果并保留每个实例的原生追踪关系。
|
||||||
|
- `8 -> 9 -> 8` 首步 X 平移轨迹保持全部实例连通,体积在 `1300 -> 1400 -> 1300` 间变化,名义边界覆盖 X=`[-8, 18]`。
|
||||||
|
- 名义与编辑态均包含 355 条原生 history,恢复态精确返回名义摘要、history 与语义 naming。
|
||||||
|
- 上游 Pad naming 证据向下游传播,恢复态语义摘要与名义态一致。
|
||||||
|
- FreeCAD FCStd save/reopen/resave 三阶段的 Shape 与 naming evidence 稳定。
|
||||||
|
- focused ordered-pair gate 已锁定真实 Profile、ordered builder、单 Solid 约束、变异、恢复、history、naming 和持久化证据。
|
||||||
|
|
||||||
后续任务必须从机器队列的最新 `nextTask` 继续,不在本文手工维护任务名称。
|
后续任务必须从机器队列的最新 `nextTask` 继续,不在本文手工维护任务名称。
|
||||||
|
|||||||
Reference in New Issue
Block a user