Skip to content

Commit 158928f

Browse files
aldoruizlunaclaude
andauthored
fix(commons): drop leftover npm manifests, x-carriage constraint in the Studio dialect, body-count docs truth (#180)
* fix(commons): drop migration-leftover npm manifests; x-carriage constraint in the Studio dialect The package.json/package-lock.json pairs in rubiks-hyperobject, custom-msh and gridfinity are leftovers from the yantra4d migration: nothing in the commons builds them (no reference under .github/ or anywhere else), and rubiks' and gridfinity's depend on file:../../packages/sdk, which does not exist here. They are the source of every open Dependabot alert. x-carriage's belt-level constraint used abs(), which the Studio's safeFormula parser does not have; it threw, useConstraints swallowed it and the rule never fired. Same semantics without a call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Aldo Ruiz Luna <aldo.ruiz.luna@gmail.com> * docs: the declared body count is declared, not yet enforced CONTRIBUTING, AGENTS, README and llms-full said --render checks each mesh is of the declared body count. The keystone never compared the two; it lands as a body-count note in hyperobjects-spec 0.16.0, which SPEC_PIN does not include yet. Also fixes the override example to the object form every manifest uses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Aldo Ruiz Luna <aldo.ruiz.luna@gmail.com> --------- Signed-off-by: Aldo Ruiz Luna <aldo.ruiz.luna@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent e6aebc7 commit 158928f

11 files changed

Lines changed: 30 additions & 11118 deletions

File tree

‎AGENTS.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ The three that most often survive review and die in CI:
104104
- Never widen a tolerance or disable a parity gate without a written `reason`;
105105
a missing reason is a conformance failure, caught without `--render`.
106106
- Never declare the body count a defect happens to produce. Declare the
107-
design's count — the declaration is how a later regression becomes visible.
107+
design's count. It is declared, not yet enforced: the keystone compares it
108+
note-first from hyperobjects-spec 0.16.0 (`body-count`), and a wrong count
109+
only becomes visible once `SPEC_PIN` reaches that version.
108110

109111
## Repository boundary
110112

‎CONTRIBUTING.md‎

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,11 @@ y4d-spec check ./<slug> --render --require-openscad --parity \
5656

5757
`--render` is fail-closed. Each mesh must be watertight, of positive volume,
5858
free of inverted bodies, **valid as a B-Rep before tessellation**, distinct per
59-
part, of the declared body count, and in agreement with the other kernel. A
60-
preset that raises or produces broken geometry is a failure, not a note.
59+
part, and in agreement with the other kernel. A preset that raises or produces
60+
broken geometry is a failure, not a note. The declared body count is **not**
61+
part of that bar yet: the keystone compares it note-first from hyperobjects-spec
62+
0.16.0 (`body-count`), which `SPEC_PIN` does not include yet (see *Declaring
63+
body counts*).
6164
Printability findings (thin walls, overhangs, build volume) are measurements,
6265
never failures.
6366

@@ -93,16 +96,22 @@ declaration is how a later regression becomes visible.
9396
"verification": {
9497
"stages": { "geometry": { "checks": { "body_count": { "expected": 1 } } } },
9598
"mode_overrides": {
96-
"<mode>": { "part_overrides": { "<part>": { "geometry.body_count": 2 } } }
99+
"<mode>": { "part_overrides": { "<part>": { "geometry.body_count": { "expected": 2 } } } }
97100
}
98101
}
99102
```
100103

101104
Overrides use **stage-qualified keys** (`"geometry.body_count"`), and an
102105
override *replaces* the base value; it never merges. A mode/part that is more
103-
than one body by design declares it and says why in the source's docstring;
104-
undeclared multi-body renders are flagged for review. Parametric counts use the
105-
`part_quantities` expression dialect.
106+
than one body by design declares it and says why in the source's docstring.
107+
Parametric counts are expressions over parameter ids.
108+
109+
The count is **declared, not yet enforced.** Until hyperobjects-spec 0.16.0 the
110+
keystone counted bodies but never compared them with the declaration. From 0.16.0
111+
`y4d-spec check --render` compares them and prints a `body-count:` **note** per
112+
mismatch (a part with `part_quantities` may render one copy or all of them). It
113+
becomes a failure only after a whole-commons nightly at that pin explains every
114+
note. Until `SPEC_PIN` reaches it, CI says nothing about a wrong count.
106115

107116
- Never leave a cut ending exactly on a face, a pocket wholly inside a solid, or a decorative plate unioned
108117
after the `difference()` that vents a cavity — all three export as inverted shells and fail the bar.

‎README.md‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ nonblocking until whole-commons false-positive analysis supports a stronger rule
148148
(negative-volume) body, **B-Rep validity before tessellation** (`BRepCheck`
149149
plus a per-solid signed-volume test — a `Reversed()` solid is `IsValid()` yet
150150
negative, and a macOS-green render is not proof: the tripod-hub fuse is
151-
invalid on macOS OCCT and valid on Linux OCP), the declared body count, and
152-
cross-kernel parity.
151+
invalid on macOS OCCT and valid on Linux OCP), and cross-kernel parity. The
152+
declared body count is not part of the bar yet (next bullet but one).
153153
- **Parity is three gates.** Extents (AABB), volume, and — since keystone
154154
`3aa57133` — *shape*: the placement offset (AABB-centre delta) is reported as a
155155
note, or fails under a per-part `"placement": "strict"`, and the Hausdorff
@@ -160,8 +160,12 @@ nonblocking until whole-commons false-positive analysis supports a stronger rule
160160
- **Declared body counts.** `verification.stages.geometry.checks.body_count.expected`
161161
at the base, with per-mode/part overrides under
162162
`verification.mode_overrides.<mode>.part_overrides.<part>` using
163-
**stage-qualified keys** (`"geometry.body_count"`); parametric counts use the
164-
`part_quantities` expression dialect.
163+
**stage-qualified keys** (`"geometry.body_count"`); parametric counts are
164+
expressions over parameter ids. **Declared, not yet enforced:** the keystone
165+
compares rendered bodies with the declaration note-first from hyperobjects-spec
166+
0.16.0 (`body-count`), and only after a clean whole-commons nightly at that pin
167+
does a mismatch become a failure. Until `SPEC_PIN` reaches 0.16.0, CI does not
168+
look at the count.
165169

166170
## Layout
167171

0 commit comments

Comments
 (0)