Skip to content

feat(cxf): export connector §7.4.1 attributes under the bare-scalar canonical subset (#141)#176

Merged
jscott3201 merged 1 commit into
developmentfrom
claude/cxf-export-connector-attrs
Jul 23, 2026
Merged

feat(cxf): export connector §7.4.1 attributes under the bare-scalar canonical subset (#141)#176
jscott3201 merged 1 commit into
developmentfrom
claude/cxf-export-connector-attrs

Conversation

@jscott3201

Copy link
Copy Markdown
Owner

Rung 6 — connector §7.4.1 attributes: Bare-Scalar Canonical export

Interchange trio rung 6 of 7. Widens the R5 attr-free CXF export subset to emit connector §7.4.1 attributes under one canonical Bare-Scalar Canonical (BSC) wire shape, at the RT-2 render fixpoint.

What

  • Emit (BSC, iff Some): S231:unit/quantity/displayUnit as bare strings (TermAttr::Bare) — Real only; S231:min/max as bare numbers (CxfValue::Float for Real, CxfValue::Int for Integer) — Real + Integer. Carried on port nodes. All-default connector emits zero attr keys → byte-identical to R5.
  • Reject (ExportUnsupported, subject = owning block): nominal (R6-A), unbounded (R6-B), non-finite Real min/max (R6-C). The importer hardcodes nominal/unbounded to None; serde_json serializes non-finite f64 as null, which would silently break render(G1)==render(G2). The R6-C finite_real_bound guard is required for RT-2 (real_connector_bound stores Some(r) with no is_finite check → Some(NaN) is import-reachable), not defense-in-depth.
  • Fold the two residual export rejection slices: subjectless OOR external_inputs, root-URN pre-seed collision.
  • Zero importer changessrc/resolve/ and src/dto.rs untouched.

How

  • classify_attrs replaces attrs_are_empty; safe total match attrs (no as_real().unwrap()); runs only in the attrs.matches(value_type) branch. build() stays infallible (emit_port_attrs, total match, no unwrap).
  • MSG_ATTRS retired; the headline rejection test converted to the attr-bearing RT-2 acceptance test.
  • Five removal-mutation pins, literal-text bit-pinned, each verified RED-then-restored-GREEN (lead verified R6-C first-hand; merge-review re-verified all 5).

Verification (lead, first-hand)

fmt · clippy · 1258/1258 nextest · doctests · both rustdoc doc gates · file-size · 448/448 determinism matrix · machete · no-secret · default-no-db — all green. Importer untouched. Golden connector_attrs.export.cxf.json is the BSC shape (bare min:0.0/max:350.0/unit:"K"/quantity:"ThermodynamicTemperature"/displayUnit:"degC").

Merge-review

3-lens Opus review: 3× MERGE, zero blocking findings (RT-2, subset/rejection, build-infallibility+determinism).

Closes no issue yet — R7 closes #141 (arrays flattened-form + enum deferral + enum-free G36).

🤖 Generated with Claude Code

…anonical subset (#141)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@jscott3201
jscott3201 merged commit 90d9f2e into development Jul 23, 2026
14 checks passed
@jscott3201
jscott3201 deleted the claude/cxf-export-connector-attrs branch July 23, 2026 05:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

oce-cxf::export is unimplemented!() — no CXF round-trip out of the engine

1 participant