Commit b37f0b1
fix(spec): probe for the checked-in sdui.manifest.json before prescribing how to make one (#16847)
* fix(spec): probe for the checked-in sdui.manifest.json before prescribing how to make one
`check:react-declaration-parity`'s refusal text was a constant asserting "this
repository contains no copy of it" and sending the reader to build objectui and
dump a manifest in a browser. That has been false since #13446: the manifest is
checked in at the repository root and lint.yml runs this gate against it with
MANIFEST="$PWD/sdui.manifest.json". Twice measured, a dev read the prose, filed
the gate as EXTERNAL_INPUT_REQUIRED / NOT MEASURED, and one such declaration
reached a deliverable — on a head where setting that one variable gives exit 0.
The text is now a function of a filesystem probe on the repository root resolved
from the script's own location. When the manifest is there the reader gets a
paste-ready block (a `cd` to the root, then the exact command CI runs); only when
it is genuinely absent does the objectui dump path appear, and it names the path
it looked at rather than making a claim about repositories in general. Both
branches are pinned — one branch tested is how this defect was built.
Also hardens the third leg of object-refinement-check-exports: it counts mount
points by name without asserting the name is declared exactly once, so a
shadowing local binding could satisfy it. Measured today: four names, one
declaration each — a residual hole in the pin, not a live shadowing.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016N6xmWt5hYm94ffVEwGH8x
* fix(spec): name the regenerator that actually owns the root manifest
The present-branch prescription said `pnpm sdui:manifest` rewrites the committed
root manifest when .objectui-sha moves. Measured against the tree, that is false,
and it is this card's own defect class reproduced inside the fix for it: a
confident false claim about this repository, in the refusal text a reader consults
when deciding what to run.
- `pnpm sdui:manifest` is scripts/gen-sdui-manifest.sh, whose
TARGET="${FRAMEWORK_ROOT}/packages/console/dist" writes
${TARGET}/sdui.manifest.json and runs the gate against that path. No line in it
writes the root artefact or scripts/sdui-manifest.record.json.
- node scripts/gen-sdui-manifest-node.mjs owns both: its header says "regenerate
the repo-root sdui.manifest.json", OUT_PATH is ROOT/sdui.manifest.json and
RECORD_PATH is ROOT/scripts/sdui-manifest.record.json. The record's own
`generator` field names it, and check-sdui-manifest.mjs prescribes that call.
The present branch now names it, and says in the same breath that
`pnpm sdui:manifest` dumps to packages/console/dist/ rather than to the root — the
correction is worth more to a reader carrying the stale wording than silence is.
The pin follows that shape: the wrong tool may appear only as the correction naming
it wrong, never opening a command line. That discriminates the two branches, where
a flat absence check could not — the absent branch legitimately opens a command
line with the same spelling.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016N6xmWt5hYm94ffVEwGH8x
* test(spec): make the pin enforce the whole sentence its comment promises
The comment said the wrong tool may appear "ONLY as the correction naming it
wrong — never as a command to run", but the assertion under it was
`not.toMatch(/^\s*pnpm sdui:manifest/m)`, which enforces only the second half.
Measured against the real generated text: the original defective claim
("`pnpm sdui:manifest` rewrites it when .objectui-sha moves") is itself MID-LINE,
so the line-anchored form does not match it at all — it was caught only by the
positive pins beside it. Prose asserting more than the code does, inside a change
about prose asserting more than the tree does.
The lookahead form enforces the whole sentence and catches the mid-line shape on
its own. Measured on all three texts before it was written, via the real
manifestPrescription() output rather than a hand-typed fixture:
present branch anchored: false lookahead: false (assertion passes)
defective anchored: FALSE lookahead: TRUE (only the new form catches it)
absent branch anchored: true lookahead: true
The absent branch legitimately opens command lines with that spelling, which is why
this assertion stays inside the present-branch leg and must not be hoisted; a flat
`not.toContain` is unavailable in the other direction, since it would forbid the
correction itself.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016N6xmWt5hYm94ffVEwGH8x
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent c930f85 commit b37f0b1
4 files changed
Lines changed: 297 additions & 38 deletions
Lines changed: 134 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
45 | 51 | | |
46 | 52 | | |
47 | 53 | | |
| |||
296 | 302 | | |
297 | 303 | | |
298 | 304 | | |
299 | | - | |
300 | | - | |
301 | | - | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
302 | 313 | | |
303 | 314 | | |
304 | 315 | | |
| |||
491 | 502 | | |
492 | 503 | | |
493 | 504 | | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
Lines changed: 36 additions & 35 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
77 | 77 | | |
78 | 78 | | |
79 | 79 | | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
88 | 96 | | |
89 | 97 | | |
90 | 98 | | |
| |||
113 | 121 | | |
114 | 122 | | |
115 | 123 | | |
| 124 | + | |
| 125 | + | |
116 | 126 | | |
| 127 | + | |
117 | 128 | | |
118 | 129 | | |
119 | 130 | | |
| |||
294 | 305 | | |
295 | 306 | | |
296 | 307 | | |
297 | | - | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
298 | 318 | | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
303 | 322 | | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
310 | | - | |
311 | | - | |
312 | | - | |
313 | | - | |
314 | | - | |
315 | | - | |
316 | | - | |
317 | | - | |
318 | | - | |
319 | | - | |
320 | | - | |
321 | | - | |
322 | | - | |
323 | | - | |
324 | | - | |
325 | | - | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
326 | 327 | | |
327 | 328 | | |
328 | 329 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
0 commit comments