Repository navigation
Commit 3937057
fix(codegen-ts): #368 — the origin.first refusal broke a legal mutual 1:1
extract-view-spec's origin.first correlation threw whenever
findReferencesBetween(base, childEntity).length > 1. That walk is BIDIRECTIONAL
(find-reference.ts walks [[a,b],[b,a]]), so a mutual 1:1 —
Customer.primaryAddressRef -> Address PLUS Address.customerRef -> Customer —
returned two entries and hard-failed codegen.
That is not #368 ambiguity: the two references point in OPPOSITE directions, the
surrounding code explicitly supports both (`referenceHolder: "source" | "target"`),
and findReferenceBetween's own contract calls mutual 1:1 "rare, but legal".
The refusal is now grouped by HOLDER and fires only when a SINGLE holder declares
two or more references onto the other side — the shape the first-match genuinely
cannot choose within. The message names that holder. A mutual 1:1 keeps the
documented first-match behaviour.
Tests: the new mutual-1:1 case asserts extractViewSpec does NOT throw and still
resolves source-held on primary_address_id (verified to FAIL pre-fix with exactly
the reported error); the existing same-holder ambiguity test still asserts the
throw, and now also pins the holder name in the message.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lfd8nat1WcSpXffd8YetiC1 parent bb4cac2 commit 3937057
2 files changed
Lines changed: 88 additions & 2 deletions
File tree
- server/typescript/packages/codegen-ts
- src/projection
- test/projection
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1189 | 1189 | | |
1190 | 1190 | | |
1191 | 1191 | | |
1192 | | - | |
| 1192 | + | |
| 1193 | + | |
| 1194 | + | |
| 1195 | + | |
| 1196 | + | |
| 1197 | + | |
| 1198 | + | |
| 1199 | + | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
1193 | 1206 | | |
1194 | 1207 | | |
1195 | | - | |
| 1208 | + | |
| 1209 | + | |
1196 | 1210 | | |
1197 | 1211 | | |
1198 | 1212 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
431 | 431 | | |
432 | 432 | | |
433 | 433 | | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
434 | 438 | | |
435 | 439 | | |
436 | 440 | | |
437 | 441 | | |
438 | 442 | | |
439 | 443 | | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
440 | 512 | | |
0 commit comments