Skip to content

Releases

specify-core 0.1.12

Choose a tag to compare

@pzfreo pzfreo released this 06 Nov 06:12
70f0496

Added

  • How a part is made: part.process (machined, 3D printed: FDM, resin, powder,
    metal, sheet metal, moulded, cast), asked last of every made part, after all
    existing questions, and never blocking a write. With no answer and no file value a part is
    machined and every question, default and write is unchanged; the machined default is never
    added by accepted defaults. A printing-class material suggests its printed process
    (attention check). The process sets defaults only: printed parts default to a ± general
    tolerance from vendor figures (written as a part note, as the kernel's general tolerance is an
    ISO 2768 class), clearance holes without an H11 fit, with heat-set insert and
    printed thread offered (written as hole notes) and ± locations, and are not asked roughness, edges or coating;
    sheet metal, moulded and cast parts are not asked roughness. An answer such a process leaves
    unasked, or only another process offers, is an unasked row (#126). Stored as the CAx-IF UDA set specify process
    (manufacturing_process) on each product definition, with the BOM's
    default.manufacturing_process marker for an accepted suggestion; read back as answered,
    file (another tool's) or default, and a stated value is not asked. Bought parts are asked
    no process. Shared by native/CLI, serve, Python and WASM questions, apply and write; an older
    Specify refuses an answer file holding part.process. See docs/process.md.
  • specify-core completions SHELL prints a shell completion script (bash, zsh, fish,
    powershell or elvish) to stdout; the README gives the install one-liners.

Changed

  • The command line is parsed by clap instead of a hand-written argparse-style parser. Commands,
    arguments and defaults are unchanged, and so are exit codes for everything that worked before
    (usage errors still exit 2), but help and
    usage errors are clap's text rather than argparse's, and -h and --help both give a
    command's full help. The top-level help now lists diff, open and bom, which were left
    out to match Python's text, and a prefix of --help at the top level (--he, --h) prints
    the help (exit 0). Positionals after an option are taken: write S A B -o OUT C D writes both
    pairs and write S A -o OUT B the pair A B, where argparse left C D and B
    unrecognised. The WASM build leaves the command line out (the root crate's default cli
    feature, off for specify-core-wasm).
  • specify-core open's help and the README name the prompt Chrome shows the
    first time ("draftwright.io wants to access other apps and services on this device"): Allow
    lets the page fetch the file; if it did not open while the prompt was up, stop the command
    and run it again; a Block is undone in draftwright.io's site settings.

specify-core 0.1.11

Choose a tag to compare

@pzfreo pzfreo released this 05 Nov 12:26
3a1541d

Fixed

  • The BOM stock proposal follows make/buy: bought parts (such as the gramil grub screw,
    washers and pan-head screws) are proposed from stock, made parts to be made, and
    not known proposes nothing. Before, every part was proposed to be made, so accepted
    BOM suggestions marked bought hardware as made in-house. Applies to bom rows, the
    bom.stock suggestion and accept_suggestions (where an explicit bom.make_buy answer
    decides it); explicit and file stock values are unchanged. A stock suggestion accepted
    into a file before this fix is re-proposed from make/buy when the BOM is read.

specify-core 0.1.10

Choose a tag to compare

@pzfreo pzfreo released this 04 Nov 22:58
0b793bd

Added

  • Review problems state each sealed interior void (an interior_voids feature whose
    kernel record is a closed_shell measurement) as an info fact with
    code: "interior_void", its feature, faces, the kernel's estimated_volume and,
    for a capped cylinder, diameter and length: "Closed internal cavity ⌀2.5 × 12
    long: no opening to the outside; can't be drilled, tapped or moulded as modelled."
    Grid-sampled chambers behind openings are not stated. Shared by native review, serve,
    Python problems and WASM review; no question is added or removed.
  • specify-core open STEP opens a STEP file in draftwright.io/specify (--editor: /editor)
    with nothing to click and nothing uploaded: the file is served once on 127.0.0.1 at a
    random one-off address, to the editor's origin only (with Chrome's Private Network Access
    preflight), and the command exits once it is fetched or after 10 minutes. --site ORIGIN
    points it at another deployment; --no-browser prints the address instead of opening it.

Changed

  • Move native, WASM and Python builds from quiddity/haecceity v0.4.6 to v0.4.7
    (dcba9d38). Sealed interior voids are reported only as interior_voids (each
    sealed shell gets an exact closed_shell record), no longer also as holes.
    Dimensions with no stated value are written through unchanged; a projected zone
    with no end geometry is read as a fact finding. An Add needing the new R3
    integer-literal repair is refused with its ids, as R1/R2 are. Recognition /6, fingerprints
    /3 and both packaged schemas are unchanged.
  • Adopt reader haecceity-pmi-read/17 in place of /15.
  • Add optional retained_shared (ids of auxiliary support Replace kept for PMI it
    cannot read) to native/CLI, Python and WASM write reports.
  • Known differences: NIST CTC-04's projected zone #18897 is a fact finding (formerly
    nonconformance); cgb217's void shell (faces 361-363, from BREP_WITH_VOIDS) is a
    Rust-only interior void, and its two former cylindrical-profile entries are kept as
    resolved. Cross-engine byte goldens, readbacks and no-BOM hashes are unchanged.

WASM API

  • WriteReport adds optional retained_shared: number[], absent when empty.

specify-core 0.1.9

Choose a tag to compare

@pzfreo pzfreo released this 04 Nov 13:01
a123e2e

Added

  • Export the complete answer set before writing with questions --resolve-defaults --step STEP, serve export_answers, Python api.export_answers and WASM
    engine.exportAnswers. Accepted defaults are explicit, including dependent questions;
    sidecars carry verified _specify.evidence, sort keys recursively and refuse incomplete
    sets or unresolved carries. Existing partial-default operations keep their shape.
    WASM export and write check evidence before feature IDs, so a full old map with
    disappeared features reports stale geometry rather than an unknown feature.
  • Add Amy's cadgen PMI plate (gist, MIT) as a fixture with cadgen's own AP242 semantic
    PMI. Tests check that it reads once as foreign PMI: ISO 2768-mK general tolerance, basic
    30/50, and no extra Specify size or location requirement beside its dimensions.

Changed

  • Move native, WASM and Python builds from quiddity/haecceity v0.4.4 to v0.4.6
    (1ebf8cb6).
    Add preserves original entity bytes in the kernel; a datum on a kept carrier
    gets a separate .T. datum feature. Add upgrades requiring source repairs
    refuse with entity ids and repair details, without a Replace retry. PMI-less
    inputs continue selecting Replace before writing.
  • Share per-face geometry carriers and reference datum features directly (quiddity#181).
    Specify stamps new complex carriers and protects carriers and face support shared
    with foreign requirements during owned-item removal; characteristic numbers stay stable.
  • Adopt reader haecceity-pmi-read/15 in place of /14, including authored standalone
    members named haecceity.feature/1. A datum whose feature reaches no face is an
    Unresolved finding, surfaced as a new PMI unresolved datum … analysis/CLI warning.
  • Refresh cross-engine STEP byte goldens and four no-BOM hashes for shared-carrier
    and direct-datum links and quiddity#184's notes placement clear of drawn ink. Per-case
    reasons are documented in the fixture README. All fourteen independent Python
    semantic readbacks remain identical; both part-index refusals stay fixed.
  • Add optional geometry_carrier_exemptions ({part, condition, aspect, feature}),
    preserved_normalizations ({id, normalization}) and presentation_warnings to
    native/CLI, Python and WASM write reports. Update the packaged presentation schema
    for optional model-space Graphic.leader; the semantic schema stays unchanged.
  • Source the v0.4.6 kernel from pzfreo/quiddity, renamed from pzfreo/quiddity-rust.
    The crates remain named quiddity and haecceity; GitHub redirects the former URL.

Fixed

  • An answer valid in form whose question is not asked given the other answers (e.g.
    datum.A.flatness or hole.position:* with part.locating "± dimensions") is listed in
    every write report's not_written with the reason, instead of being dropped silently. It
    stays stored and exported; apply does not refuse it. Rust api, CLI, serve and Python now
    refuse an answer ID no question can have (unknown answer ID), as WASM already did.
    A carry block applies only while its question is asked; otherwise it is listed the same
    way, and it refuses again once later answers ask the question. A STEP keeps such a block
    in its stored-answers payload (unresolved, beside answers) and restores it on reopening;
    older builds ignore it. Unknown IDs stored by earlier versions are left out on reopening
    with a warning, not refused. preview no longer computes these rows; the editor's write
    adds them. For #126.
  • Preserve dropped revision-stable datum/part/BOM answers as _specify.unresolved
    carry blocks: CLI, serve, Python and WASM bulk defaults cannot silently replace them.
    Failed feature carries remain report-only: old face-based IDs may name a different
    feature in the destination. Explicit answers clear stable question blocks, which
    questions and review now show as required, with no default and the diff reason.
    Diff answer maps also carry the in-STEP face evidence; write refuses
    stale evidence before output, naming CLI answer files and directing callers to diff.
    Plain maps remain compatible and cannot detect changed in-range face identities.
    Re-run diff to regenerate changes files from released v0.1.8 and earlier: their
    metadata-free changes/answers.json cannot reveal dropped answers, so the literal
    old-file write --accept-defaults repro still exits 0 on updated tools.
    Older Specify/editor WASM builds reject new _specify maps as unknown answer ID;
    older CLI and Python installs may accept and ignore _specify, without its evidence and
    carry-block checks. Old plain files remain compatible with new tools.
  • For #123, #124, #125: diff maps an added requirement's (extra.*) faces and
    reference through the same face matching as datums, on unnamed parts as on named
    ones, instead of keeping old indices that could name another feature under an ok
    verdict. A face with no match leaves it orphaned, several ambiguous. A carried
    answer the new part refuses (a size whose two holes now differ) is listed as
    unresolved with the refusal instead of raising, so the rest of the report is
    returned. A refusal naming no answer is pinned only on one whose removal clears it;
    otherwise the answers stay carried and the report adds a carry_refused problem.
    Dropped extra.* answers are _specify.unresolved carry blocks: write
    and bulk defaults refuse until the requirement is answered again or its entry removed.
  • Diff refuses stale answer evidence with exit 2 and asks for the matching old part,
    instead of suggesting diff again while already comparing revisions.
  • Diff folds a thread's own thread manufacturing note into its thread item when
    owner id, faces and drawing wording agree. Added, removed and changed threads
    appear once; manufacturing-only edits still change the thread item with its
    drawing wording. Other manufacturing notes remain separate across native, CLI,
    WASM and Python diff.
  • Analysis existing records (and Python ExistingPmi) mark a basic dimension with
    basic: true, as does the scene's specify[id] metadata, and diff words add (basic).
    Basic dimensions such as cadgen's "theoretical" 30 and 50 on the PMI plate were read by
    haecceity as basic but reported as plain untoleranced dimensions.

WASM API

  • Add IntentEngine.exportAnswers(answers: string): string for complete, deterministic
    answer sidecars with geometry evidence; incomplete sets and carry blocks throw.
  • Add AnswerFileMetadata for optional _specify.evidence and _specify.unresolved
    in answer maps; default acceptance and writes enforce carry blocks and face evidence.
  • PmiSceneMetadata adds optional basic: true for a basic (theoretically exact) dimension.
  • Add WriteReport, GeometryCarrierExemption and PreservedNormalization
    interfaces, with optional geometry_carrier_exemptions, presentation_warnings
    and preserved_normalizations report keys. Expose optional PmiSceneGraphic.leader
    in millimetres.

Kernel note: specify-core-rust uses haecceity tag v0.4.6, quiddity tag v0.4.6; pzfreo/draftwright-rust@v0.2.10 uses haecceity tag v0.4.7, quiddity tag v0.4.7. Different kernels may number STEP faces differently.

specify-core 0.1.8

Choose a tag to compare

@pzfreo pzfreo released this 02 Nov 21:54
ff88fdd

Added

  • Preserve answered and imported limit dimensions through STEP, resume, scene labels and
    diff reports; size and distance answers accept lower/upper slash bounds. Analysis and
    Python existing-PMI records expose optional absolute limits alongside derived deviations.
    Size write reports now show explicit ± and signed deviation bands as well as fits and limits.
  • Offer ISO 2768 f/m/c/v × H/K/L combined general-tolerance classes and round-trip their
    geometric class, retaining the ISO 2768-m default and existing linear tables.
  • Add the shared text-to-cad PMI plate from pinned cadgen 0.8.3 exports, with
    regeneration source and MIT attribution. Tests cover Specify-authored PMI,
    schema-3 face names, all 16 answers surviving thickness/bore edits, and the
    current added-hole result: 12 attached, four explicitly unresolved after
    cadgen renames supports. Verify written face names and AP242 PMI anchors.

Changed

  • The Python package's links and the step-diff README point at draftwright.io; the step-diff
    handoff accepts /diff from both draftwright.io and editor.draftwright.io (#108, #112).
  • Store supplied answers in Add mode beside foreign PMI. Resume keeps unmarked PMI in
    existing; mixed rewrites replace only Specify's provenance-marked requirements and
    preserve their characteristic numbers while retaining foreign entity bytes. Scoped saves
    supersede stale legacy answer frames without removing their unmarked records.

Fixed

  • An intent no longer lists the file's own stated dimensions as requirements. The shared
    planner still uses them, so General guesses stay off those features, but the file's PMI
    stays the characteristic: on NIST CTC-01 the editor showed every toleranced hole twice,
    once with Specify's bare nominal. Written STEP bytes are unchanged.
  • Answered diff scenes remove replaced file identities together with their PMI
    rows before merging retained CAD requirements, keeping semantic links and old
    callouts consistent with each scene's own document.
  • Every diff pairing pass checks requirement kinds and known measurement roles,
    including number and id matches. Thread callouts cannot pair with location
    dimensions; location roles follow the part's rotation during comparison.

Kernel note: specify-core-rust uses haecceity tag v0.4.4, quiddity tag v0.4.4; pzfreo/draftwright-rust@v0.2.9 uses haecceity tag v0.4.3, quiddity tag v0.4.3. Different kernels may number STEP faces differently.

specify-core 0.1.7

Choose a tag to compare

@pzfreo pzfreo released this 02 Nov 05:57
ac5d31b

On quiddity/haecceity 0.4.4. Adds thread callouts and polyline roles/text cell boxes from 0.4.4, exact tap-drill matches defaulting to tapped holes, one GENERAL NOTES block, a BOM, stable characteristic-number keys (number-history schema 2; 0.1.6 files keep their numbers), and richer diff reports: optional compared scenes, old_id, face anchors, PMI-coloured model.png, geometry-first pairing for freshly planned revisions, and thread-note wording. STEP diff comments no longer carry a JSON payload. presentation.semantic_ids again lists only the PMI document's own ids.

  • Diff retains uniquely matched planned dimensions when their target/reference
    supports grow, after exact-face matches and before kind fallback. Measurement
    roles distinguish existing bore/pitch/location requirements from new counterbores.

  • Diff pairs fresh-numbered plans by requirement/geometry identity; only continued
    characteristic-number histories give numbers priority. Thread manufacturing notes
    show drawing wording, and semantic-only attribute notes, knurls and finishes show
    their values.
    WASM assembly diff accepts per-part acceptDefaults maps and names the part and
    question id when a nested answer is invalid.

  • Prefer an exact tap-drill match over an ambiguous smaller clearance screw when suggesting a hole function; accepted tapped holes carry thread semantics without a tap-drill fit. Document and type additive haecceity polyline roles and text cell boxes (pass-through from v0.4.4).

Fixed

  • presentation.semantic_ids lists only the PMI document's own ids again. The
    part.material alias stays in items and specify, but no longer appears in
    semantic_ids, where consumers that cross-check it against the PMI refused the
    whole drawn PMI whenever a material was answered.

Added

  • Diff reports optionally include the exact compared pmi.scenes through Rust,
    CLI --pmi-scenes, WASM and Python. Requirement items add differing old_id
    and per-side mesh face anchors, including semantic-only requirements. Revision
    PNGs draw changed/added presentation callouts and translucent removed ghosts,
    framing their supplied geometry alongside existing geometry change colours.

  • For #79: opt-in assembly BOM writes via explicit bom.* answers or --bom / API
    acceptance. Optional questions expose suggestions, never ordinary defaults. Assembly
    analysis adds a sourced bom row using its existing parse. Separate occurrence UDAs
    preserve older-engine resume; explicit answers override current export data, accepted
    suggestions do not. Geometric item history tolerates fingerprint drift, small parts
    and stable duplicate ordering; removed numbers are retired. Read through Rust, CLI,
    Python and WASM. See BOM storage and numbering.

  • Regression coverage for #89 using FreeCAD's attributed CC-BY-3.0 hex standoff:
    AP214 PRODUCT_TYPE upgrades to PRODUCT_RELATED_PRODUCT_CATEGORY, preserving
    every other original entity byte, and written PMI/answers read back. Add the
    attributed LM10UU fixture to cover independent size supports and unchanged resaves.

Changed

  • Diff reports describe requirements in Markdown and JSON summary text, naming the
    changed feature and its requirement notation when review is needed. STEP diff
    comments omit the JSON payload and flag differing committed sidecars in one
    line, with a 3D review link for public repositories. answers.json, JSON keys
    and verdict meanings remain unchanged.

  • Refresh the numbered M2 presentation fixture and four distinct no-BOM write
    hashes for v0.4.4's added thread ink and neighbouring callout placement.
    Legacy semantic/part-setting comparisons and all six exact API/CLI byte
    comparisons remain enforced; neither the old semantic inputs nor recognition
    expectations change.

  • Keep exact tap-drill defaults and their exact-value guards after the main merge:
    five frozen rule cases (CGB202, CGB217, CGB243, NIST CTC-04 part 0 and FTC-10)
    gain thread/depth answers and dependent ordering; thirteen CLI envelope entries
    carry the same reason without wildcard cases or paths. Explicit-clearance fit
    tests still choose clearance. Fresh-number order checks replace only the
    former tap-drill size with its thread; CGB243's obsolete General-size conflict
    disappears while its written count is unchanged.

  • Move quiddity/haecceity (native, WASM and the Python binding) to v0.4.4
    (53cf3604), including thread callouts, polyline roles and text cell boxes. The pin checker requires the same release. Reader binding advances
    to haecceity-pmi-read/14 for datum-constituent identity (#173); the packaged
    haecceity.pmi/1 schema is byte-identical to upstream and remains unchanged.
    Upstream #171 improves callout/frame placement and label packing; #172 bounds
    generated STEP string literals and chunks long descriptive values. Recognition /6
    and fingerprints /3 are unchanged.

  • Read haecceity #172's marked ordered text chunks when recovering saved answers
    and carried application payloads. Previously a long saved answer failed write
    verification after the kernel bounded its strings; legacy single strings remain
    readable. Regression coverage checks long-answer resume/resave and rejects
    unmarked, unordered or cyclic compounds.

  • For #163: live PMI scenes combine accepted part settings, imported semantic notes and
    material in one GENERAL NOTES block, replacing the file block in the scene while
    lossless writes keep its records. Reopened appended files also draw one block.
    Part-level edge-break prose answers part.edges
    as written. Feature notes retain their owner; haecceity generates their fallback ink
    together with the combined block and owns all placement. Rotated-part regression
    checks use the notes plane. File callouts
    report file source and material DMIAs link through part.material.

  • For #75, written hole sizes, pattern
    origins/pitches and prismatic plane levels/extents follow the shared planner.
    Inspection plans contain fewer rows: the default cross-engine plate changes from
    21 dimensions / 28 characteristics to 12 / 19. The raw all-General planner has
    11 quantities; Specify adds two offsets with distinct Basic/General contracts
    and omits the drill already carried by the thread.
    Existing numbers win; removed rows retire permanently and the write report
    lists their numbers. On the frozen pre-planner
    plate, numbers 6–11 and 21–26 retire. New requirements allocate above the
    previous high-water mark. Deferred feature owners retain their existing path.
    Locations require real face supports; thread drills and duplicate legacy spans
    are stated once. Answered fits and Basic locations retain their contracts, including the radial
    bolt-circle diameter belonging to a position frame.
    Determined enlargement depths are reference dimensions. Unknown-bottom depths
    and bounded shoulder stations that lack unambiguous semantic supports are
    reported instead of adding inspection constraints; physical-plane witnesses
    keep their legacy path.
    General-tolerance range selection uses the same six-decimal nominal as the
    written dimension, keeping boundary values stable under rigid moves. Source
    metadata for newly shared dimensions names their complete measured target.

  • For #79: record the additive assembly analysis.bom field in the per-part oracle
    ledger, preserving all legacy layout/value assertions and opt-in write behavior.
    Review the three --bom CLI usage/help departures with exact text assertions;
    retain the datum-origin snapshot and revalidate ordinary write bytes against main.

  • For #79: preserve opt-in BOM alongside shared planner dimensions; ordinary writes
    are checked byte for byte against main 8d5a040 through the CLI and API.

  • Earlier v0.4.2 upgrade (d7112fd), retained as recognition evidence:
    Recognition /6 and fingerprints /3 stay unchanged; turned steps with spanner
    flats, grouped interrupted torus fillets and unproved corners follow upstream #167.
    PMI now repairs reversed bounds and datum-feature child aspects (#168), and
    duplicate source identifiers and incomplete non-runout zones (#170).

  • Refresh the packaged PMI schema for optional per-item identifier values.
    The documented reader binding moves from haecceity-pmi-read/11 to /13
    because #168/#170 change readings and findings; Specify always rereads STEP.

  • Rejudge the frozen-Python recognition ledger for v0.4.2's grouped interrupted
    fillets and omitted unproved bevel corners. Retain 192 retired paths as resolved
    assertions and add 266 exact case/path judgments, with a native torus audit of
    all 44 changed groups (220 patches); do not regenerate the Python captures.
    Inventory tests count torus patches, retaining their original coverage thresholds.

  • Revalidate v0.4.2 after merging #91's planner dimensions and #94's opt-in BOM.
    Regenerated cross-engine byte goldens and independently recaptured Python readings
    remain unchanged from main, including both refusals. The pin checker now requires
    v0.4.2 as well as matching native/WASM manifests.

Fixed

  • For #96: give characteristic-history schema 2 an explicit text vocabulary, independent
    of Rust Debug and generated planner IDs. Keep fit classes, modifiers and values out of
    identity; compare temporary matching hints as typed values. Pin readable keys and
    preserve all six numbers when upgrading a file written by the v0.1.6 engine.

  • For #95: keep characteristic numbers through tolerance value and material-modifier edits,
    so diff reports one changed requirement without a spurious renumbering. History schema 2
    uses structural requirement identity; schema-1 files retain their numbers and high-water
    marks on migration. Removed numbers stay retired.

  • The step-diff Action's "answers carried" block hides Specify's own _specify*
    records (such as _specify_characteristic_numbers) at any depth. They stay in...

Read more

specify-core 0.1.6

Choose a tag to compare

@pzfreo pzfreo released this 01 Nov 02:29
d6f65a8

On quiddity/haecceity 0.4.1. Adds answers keyed by authored STEP face names (#87, cadgen's f: names), adopts 0.4.1's presentation (callouts by their features, one numbered GENERAL NOTES block, plane views, stroked text), adds PmiScene TypeScript types, and builds the Linux command line against glibc 2.28 so it runs on Amazon Linux 2023 and other older distributions. Feature-on scenes and written STEP layouts change with the new presentation. Named parts store answers schema 3; unnamed parts are unchanged.

Changed

  • Compare and label each part note by its semantic wording, so a change
    within the shared GENERAL NOTES graphic leaves other note requirements unchanged.
  • Pin quiddity and haecceity to v0.4.1. Recognition /6 and fingerprints /3
    stay unchanged. Adopt regenerated ladders/callouts, one numbered GENERAL NOTES
    block, generated plane views, AP214 PRODUCT_TYPE upgrades, panic isolation and
    graphical callout reading; feature-on scenes and written STEP layouts change.
  • Build the Linux CLI against glibc 2.28 using pinned Zig/cargo-zigbuild tools;
    check its symbols and revision smoke on Amazon Linux 2023 and AlmaLinux 8.
    Release asset names and archive layout stay the same.
  • Preserve optional text-placement stroked flags in PMI scenes; prune saved-view
    references when graphics are filtered or replaced, removing empty views.
  • For #87: only unique names in the authored f: namespace become
    face identities. Shared names and generic/class labels (including singletons)
    retain geometric evidence and schema 2 when no usable identities remain. Omit
    unusable labels from analysis; retain the full oracle comparison unchanged.

Added

  • For #87: carry authored STEP face names in analysis and stored-answer schema 3.
    Resume and diff match names exactly before unnamed geometric supports; missing or
    duplicate names leave answers unresolved. Unnamed parts retain schema 2 and their
    existing bytes. See face-name compatibility.

WASM API

  • Add optional PmiSceneMetadata.notation for individual semantic note labels;
    shared presentation graphics retain their render-once identity and geometry.
  • Add PmiScene JSON result interfaces for both pmiScene entry points, including
    semantic rows/ids, graphics, optional stroked text placements, planes, views and
    Specify statuses. Document parsing and rendering; the wire return remains a string.
  • For #87: snapshot faces add optional name; evidence adds schema 3 face_names
    and optional mixed-part geometry. Add descriptive AnalysisFace and
    AnswerEvidence JSON types; existing methods and answer shapes are retained.

Kernel note: specify-core-rust uses haecceity tag v0.4.1, quiddity tag v0.4.1; pzfreo/draftwright-rust@v0.2.7 uses haecceity tag v0.2.6, quiddity tag v0.2.6. Different kernels may number STEP faces differently.

specify-core-rust 0.1.5

Choose a tag to compare

@pzfreo pzfreo released this 31 Oct 13:33
1f4d8b9

On quiddity/haecceity 0.2.8. Adds pmiScene (one PMI scene for the editor's Specify, diff and viewer), rebuilds diff's PMI section on haecceity PMI with characteristic numbers, records dimension origins (#77), and adds pmi_scene and api.diff to the specify-core Python package. diff's pmi.stored/pmi.existing are deprecated in favour of pmi.items. The WASM ceiling is now 15,000,000 bytes.

Changed

  • Revision PMI reports compare haecceity semantic requirements and full notation,
    with pmiScene ids/statuses and inspection numbers, geometry-derived dimensions,
    foreign PMI in resumed files, and support matching across face splits. Add
    pmi.items; retain deprecated stored/existing for one release. Numbered
    removals read “retired”; Markdown lists changes in inspection order.
  • The reviewed WASM size ceiling is raised from 12,980,000 to 15,000,000 bytes (maintainer, 2026-10-31), after pmiScene measured 12,903,620 bytes.

Added

  • For #142: native pmi_scene::Scene and raw-byte pmi_scene, Python pmi_scene
    and bundled specify_core/schema/ JSON Schemas. Scenes contain haecceity's
    semantic/presentation documents plus Specify status, question, number, origin/source.
    Requirement-based Specify ids survive reviews; face anchors match mesh indices.
  • The Python package specify-core on this engine (crates/specify-core-py): specify-core's
    Python API and the specify-core command line, with no Python dependency; abi3 wheels for
    CPython 3.12 and later, built and published by .github/workflows/python.yml. See
    docs/python.md.
  • Its PyPI page (0.1.4.post1, packaging only): a README for users, with examples checked
    against the published package, plus project links, keywords and classifiers.
  • For #77: each written size/location dimension records its origin and stable geometric
    source as a CAx-IF UDA on the dimension itself. Native PMI/analysis and WASM snapshots
    expose stored metadata; accepted defaults count as requirements and kept foreign PMI
    remains byte-identical. Edition-1 writes upgrade the header to AP242 edition 4.
    See dimension origin and source.

WASM API

  • diff reports add pmi.items with ids/numbers matching pmiScene; export
    PmiItemChange and DiffPmi TypeScript interfaces. Python adds api.diff
    returning the same selected-part report plus Markdown.
  • Add IntentEngine.pmiScene(answers) on the open part session (including openPart)
    and pmiScene(stepBytes, part?) for view-only As Drawn PMI without an interview.

Fixed

  • PMI scenes resolve part-setting questions from the rules table and writer's kind
    mapping, including part.coating. Feature-owned thread/knurl attributes inherit
    their requirement's question/status; supporting rows have no interview overlay.
    Pattern counts apply only to sizes, locations and tolerances, never datums.
    Foreign numeric ids become characteristic numbers only with Specify history.
    Python scene answers use the same input validation as WASM.
    General locations without a feature id use their face supports for stable identity.
    Locations shared by a datum member and its pattern keep their question identity;
    repeated measurements retain distinct characteristic numbers through STEP readback.
  • Scene metadata/history ids follow the requirement owner and property name across
    answer changes. Foreign datum identities and file callouts are reused during a live
    review, including when adding a control; saved views and planes survive the merge.
    Part-default surface finishes retain their #65 characteristic number in live and stored scenes;
    their question and the edge-condition question use part.surface_finish and part.edges.

Changed

  • Upgrade quiddity/haecceity to v0.2.8 (840b2ad). Scene export uses only the
    serialise-only json feature in native, WASM and Python; no JSON import API is exposed.
    Presentation retains text placement, plane/graphic ids, saved views and datum links.
    Package schemas match v0.2.8. Written mass units use conversion-based gram per
    CAx-IF Annex C.1. Existing Specify STEP goldens remain byte-identical: its material
    writer supplies no density and foreign density records are preserved. Recognition stays unchanged.

  • Upgrade quiddity/haecceity to v0.2.7 (eaa7762); recognition stays unchanged.
    Writer expectations change for slash-separated deviations and notes/frame placement.
    Remove the blank-note drawing workaround: literal blank rows now write valid STEP directly.

  • Upgrade quiddity and haecceity to v0.2.6 (b9addd9, quiddity-rust#137/#135),
    including native, WASM and Python. Written STEP now carries dimension and tolerance
    callouts, ISO 1302 face surface symbols and a General notes block for part settings.
    Multi-face aspects are composite, locations reference their own aspects, and a datum
    feature that also has a size uses separate datum-feature and dimensional-size entities.
    Presentation stays enabled; optional F3D import stays off. Recognition schema 6 and
    fingerprint format 3 are unchanged.

Kernel note: specify-core-rust uses haecceity tag v0.2.8, quiddity tag v0.2.8; pzfreo/draftwright-rust@v0.2.6 uses haecceity tag v0.2.6, quiddity tag v0.2.6. Different kernels may number STEP faces differently.

specify-core-rust 0.1.4

Choose a tag to compare

@pzfreo pzfreo released this 30 Oct 19:21
fd184f0

Added

  • For #65: stable per-part characteristic numbers in standard AP242 ID_ATTRIBUTEs,
    with a persistent high-water mark that retires removed numbers. PMI/analysis and WASM
    snapshots expose file numbers; answer revision carry preserves them through quiddity's
    correspondence. General dimensions written as PMI are numbered; rows without an entity remain unnumbered.
    A part's first numbering follows inspection order: datum letters, then front/top/right view
    and row-major face position, with size/location/control ties; face finishes, threads and
    knurls share that walk and unpositioned defaults go last. Later additions append above the
    high-water mark. See
    characteristic number storage and allocation.
  • The STEP states every dimension a drawing would (#63): the writer writes the dimensions the
    general tolerance covers (plain sizes, plane levels and hole locations, general.rs) with
    their nominal alone, under the general tolerance written for the part. A part located by ±
    dimensions now carries its hole locations. They are counted in one report line,
    N dimensions under the general tolerance. A part with PMI from elsewhere gets none (its
    own dimensions stand), and a datum's own faces get no size (its datum stays a plain datum
    feature). Read back, Specify's own nominal-only dimensions settle no question.

Fixed

  • For #67, revision reports describe an added turned end chamfer with its size and
    boss context. Retained supporting surfaces and boundary edges distinguish trimmed
    flat centroids from real moving or removal. Raw recognition, correspondence and answer migration are unchanged.

Changed

  • Relicensed from AGPL-3.0-or-later to Apache-2.0 (LICENSE, NOTICE, both crates'
    license fields), matching quiddity and haecceity.

  • Upgrade quiddity and haecceity (native and WASM) to v0.2.5 (6110b4c,
    quiddity-rust#134). Boss heights and free ends include their own convex end chamfers
    and rounds; edge-treated plates stay plates, and inside turned fillets are described
    as concave. Saved boss answers retain their face targets; revision migration still
    reviews changed dimensions. Recognition schema 6 and fingerprint format 3 stay unchanged;
    optional F3D import stays off. Plate centre coordinates use the same six-decimal mm
    publication as face centroids, keeping native and WASM snapshots consistent after
    projected edge strips are restored.

  • Upgrade quiddity and haecceity (native and WASM) to v0.2.4 (2f6b3a6): haecceity's Add
    shares the face usages a file's location dimensions hold, so PMI added beside them no longer
    breaks item_identified_representation_usage.UR1 (quiddity-rust#132).

  • Upgrade quiddity and haecceity (native and WASM) to v0.2.3 (ced75a5).
    Analyses and revision reports describe turned bodies, annular face grooves (rim
    diameters, depth and wall angles), cylindrical profile surfaces and concave fillets,
    including spherical inside corner caps. These families follow the existing body,
    groove and surface rules without additional interview questions or duplicate PMI.
    Full-length turned ODs are no longer bosses; their external cylinders retain the
    existing OD datum defaults. Saved answers on a removed boss remain
    visibly unresolved for review and cannot migrate to another family. Recognition
    schema 6 and fingerprint format 3 are unchanged; optional F3D import stays off.

specify-core-rust 0.1.3

Choose a tag to compare

@pzfreo pzfreo released this 29 Oct 16:46
0f33acd

Added

  • specify-core diff compares two revisions of an assembly with no --part: its parts paired
    by name, a parts table of those changed, added, removed, placed a different number of times or
    moved, each changed part's own report, and a picture of the whole assembly coloured by part.
    Answers are by part name; a single part's answers are taken as its part's when its file
    becomes an assembly. --viewer URL links each changed part to the /diff page with
    &part=NAME. A single part's report is unchanged (docs/diff.md, "Assemblies").
  • The STEP diff action compares assemblies: one comment with the parts table, a section for each
    changed part, the assembly's picture and a /diff link for each changed part.

WASM API

  • diff compares two revisions of an assembly part by part: {report, markdown, parts}, each
    changed part with its own markdown and view. Its signature is unchanged.