Two-sheet frame example

The executable recipe builds a general sheet and a feature sheet from one shared recognition inventory. It demonstrates the supported workflow behind the titanium-frame field report, using Document, authored Sheet views/dimensions, a section, and compiler-owned location cells. It does not patch a renderer or position feature annotations with page coordinates.

This is QUOTATION / DFM REVIEW — NOT RELEASED. It demonstrates selected bore operations, overall dimensions, cylindrical seats, hex-pocket sizes and a section; it is not a complete manufacturing drawing. Missing pad, flat and blend measurements, hinge location and unresolved engineering decisions remain visible in the report.

Run and inspect

From an isolated checkout/environment with the repository's locked dependencies:

uv sync --group dev --group docs
uv run python docs/examples/frame_document.py tests/fixtures/whistle_frame_reference.step build/frame-review
uv run pytest tests/test_issue_1544_frame_document_canary.py -m real_part_canary -v

The output directory must be new. It receives general and features PDF/SVG/PNG files, document.json and manifest.json. The manifest records the source and recipe hashes, package/Python versions, platform, sheet options and export options. reproducible=True is an export setting, not a promise that a future version will draw the same picture. The canary checks physical identities and measurement meanings rather than a cross-version image digest.

Open both exported sheets. Check the cut material and upward cutting arrows on section A–A, the counted seat and hex-pocket callouts and seat-axis locations on the general sheet, and the three grouped bore callouts, location table and preliminary-status notes on the feature sheet. The feature table uses X/Y/Z distances from the model's minimum datum planes; the axis column identifies each operation's drilling axis. Ordinary annotation placement and table fitting remain the engine's responsibility. A table that does not fit must be reported, not compressed or overlapped.

Read the document assessment alongside the drawings. Per-sheet missing-measurement warnings are expected where the other sheet supplies the measurement. Package coverage still includes all 77 known obligations, including twelve hex-pocket sizes and eighteen circular-seat requirements. With Quiddity 0.2.9 and both profile grammars, the recipe credits 43 of those obligations; the remainder must not disappear merely because a sparse sheet has few overlaps. Coverage, layout, fidelity and manufacturing readiness are separate judgments. Unmeasured section furniture and notes also remain explicit in the fidelity unknowns.

Original printed-frame regression input

tests/fixtures/issue_1595_whistle_key_frame.step preserves the exact fixture supplied on the #1595 fixture branch. It was generated from pzfreo/whistle-key at 7fb4d14, from exports/three-key/print-oriented/frame_print.step. Its SHA-256 is 8f060dfd4eeb4ff9589243f85eea8ca027784ac51ae98dc2d29a2371a2d115d0.

Keep its acceptance separate from the titanium recipe's reference:

Input Envelope (mm) Seat run intervals along Y (mm)
Original printed frame 31.3 × 71.595 × 15.8 −35.297…−29.297, −10.923…−4.923, 29.297…35.297
Titanium reference 31.3 × 71.595 × 15.3 −3…3, 21.375…27.375, 61.595…67.595

Both published Quiddity 0.2.9 inventories contain three circular seats and six hexagonal blind pockets. The printed variant also contains three additional rectangular channel records. Coordinates and dimensions from one variant must not silently become the other's expected facts. The recipe above remains specific to the titanium input.

Fixed operation facts and deliberate limits

The pinned part has these recognized operations:

Operation Observed identity Authored representation
Through bolts Six Z-axis Ø2.4 bores, depth 1.6 mm, with one grouped owner One six-member quantity/diameter callout and six pairs of member coordinates
Blind sockets Three X-axis Ø2.4 bores, depth 1.5 mm One three-member callout with depth and three pairs of member coordinates
Hinge bores Six Y-axis Ø1.1 through bores, each 3.0 mm deep, with one grouped owner One six-member diameter callout and an uncredited engineering-decision note

These are plain circular bore operations: counterbores, spotfaces, countersinks, threads and profile modifiers are absent. The recipe refuses changed operation semantics instead of selecting by diameter alone. The canary independently checks member centres and complete attributes, not merely the number of features recognition returned.

The hinge traverses six interrupted bearing segments. Quiddity 0.2.9 supplies six exact physical bore occurrences; Draftwright groups their equal machining specifications without joining the air gaps. The pinned datum-aligned fixture has 3.0 mm lands, unlike the 2.7 mm lands described for the original printed-part report. The note SIX BEARING SEGMENTS - FIT / PIN RETENTION TBD has no satisfies= declaration and earns no additional coverage. This recipe still leaves the hinge's transverse location and each bearing's axial placement unresolved; correct occurrence identity alone does not state them. The general sheet states the three cylindrical seats with one counted diameter/run/arc callout and datum-to-axis coordinates. Centre marks identify the virtual cylinder axis; the leader targets the physical curved wall. Each seat retains its own six requirements and source occurrence even where the coaxial seats share dimensional ink (#1613).

The six underside hex pockets share one 6× HEX 4.3 A/F × 1.9 DEEP callout, anchored on a physical pocket wall. Each pocket retains independent across-flats and depth requirements. Removing the callout loses all twelve credits; a descriptive table containing the same numbers cannot restore them. Titanium grade, hinge fit and pin retention remain engineering decisions.

Replay and measurement transfer

Keep the STEP, this Python recipe and the manifest. Replay by executing the recipe and resolving the current exact feature owners with its operation assertions. Report owner, occurrence, requirement and sheet IDs are local to that document run; do not deserialize them as durable feature identities or union independently built Drawing/PDF reports.

Edit source declarations to choose which sheet carries a measurement. For live inspection, the canary declares the hinge diameter on both sheets, removes the general-sheet instance to establish a feature-only baseline, restores it through the public callout() verb and removes the feature-sheet instance. It compares exact requirement membership throughout. Removing the last instance must lose coverage while retaining the same physical obligation. Repeating a measurement across sheets earns one credit, not two; conflicting meanings retain both claims.

The recipe and the canary are complementary: the recipe is the editable source; the canary checks its physical facts, actual placed claims, section hatch/arrow geometry, coverage loss and production exports. Neither certifies manufacturing readiness or unrecognized geometry.

Fixture provenance

The fixture is the datum-aligned drawings/titanium/frame-reference.step from pzfreo/whistle-key@76ccdc2, retained locally as tests/fixtures/whistle_frame_reference.step so CI needs no download. Its SHA-256 is 078d0abd52b618a1a9180bb27a162a8fd1b8ae1a74a52571adfdbf3914f23d71. The hash pins the input, not the generated drawing. A different part requires a deliberate recipe and expectation review rather than changing the hash until the test passes.