Skip to content

fix(semantics,symbols): a then x; succession owns its two ends on the native walk — nameless ReferenceUsages through an EndFeatureMembership each, named by the happensBeforeLinks end they redefine, the target end reference-subsetting the member it reaches — as the RDF writer mints them and the pilot exports them - #2173

Open
devin-ai-integration[bot] wants to merge 3 commits into
developfrom
fix/then-succession-end-memberships

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

What and why

A then x; succession whose source is the member before it (or a positional source carrying a multiplicity) owns two end features in the conversion and in the pilot's export — nameless ReferenceUsages through an EndFeatureMembership each — but the native walk owned none: SuccessionAsUsage::ownedRelationship answered the empty list where the RDF writer states two memberships, and the structure differential reported relatedFeature/sourceFeature/targetFeature as unsupported for every such succession (QVTS SPARQL cross cells ownedRelationship ×3 and the four symbol unsupported rows).

The semantic model now mints the two ends lazily per succession (SuccessionEndMembers, memoized in a side table; the AST is untouched), as the writer does (encodeSuccessionEdge):

  • each end is a SymbolConnectorEnd with isEnd, metaclass ReferenceUsage, listed first in OwnedMemberships under an EndFeatureMembership;
  • it declares no name and is named by the Occurrences::happensBeforeLinks end it redefines (earlierOccurrence, laterOccurrence), through the same implied-end lookup ImpliedEndName already used;
  • the target end owns a ReferenceSubsetting to the member it reaches (acquire, the one after it, the library's done); the source end is minted empty, as the writer mints it;
  • element ids follow the writer's end0/end1 (and end1's rs) on the query leg, in the export id table and in the structure differential's id mapping.

then idle; after a bare entry; owns no ends, as the writer writes none. A target no element stands for (then terminate;) reads as unresolved rather than as an empty list.

Two follow-ups named, not fixed here (writer-side): the pilot implies a ReferenceSubsetting on the source end to the preceding member, which the writer leaves empty; and for then done; inside a use case the writer references Actions::Action::done while the model resolves the done the use case inherits — the structure differential now shows these as different instead of symbol-missing.

Specification basis

SysML v2 textual notation (SysML.xtext TargetSuccession): a then succession's two implied ends; KerML Connector ends as EndFeatureMembership-owned features. No compliance row moves.

How it was verified

  • New TestThenSuccessionOwnsItsEnds (semantics): two EndFeatureMemberships, isEnd, effective names, target end reference, and the bare-entry; exception — fails on develop.
  • Structure differential re-recorded, growth only: Connector::relatedFeature/sourceFeature/targetFeature symbol-missing drops (examples 178 → 111, pilot corpora 1120 → 1011), Relationship::source/target, Element::ownedRelationship, Type::ownedEndFeature, Feature::ownedReferenceSubsetting gain matches; the residual growth in different/symbol-extra is the two writer-side follow-ups above plus the pre-existing anonymous-inherited-member and isConstant classes on the new features.
  • Derived census re-recorded (element counts only, every property answers at least as often); pilot api-json differential -check reproduces; both corpus round trips, make docs-counts, snapshot test reproduce.
  • go build ./..., go vet ./..., gofmt -l . empty, make test-short 134 ok + cmd/sysml, tests/codegen, tests/export passing alone at 40m (cold-cache timeout).

Checklist

  • make test and make lint pass locally
  • Tests added or updated for the change
  • Documentation extended where it already covers the surface (see CONTRIBUTING.md)
  • Changelog entry added as changes/unreleased/<slug>.<section>.md, not as an edit to CHANGELOG.md
  • baselines regenerated and make docs-counts run if a gate count moved (compliance rows need nothing: the census is counted at docs build)
  • No internal work-item labels (waves, slices, F4, K5) in the body, docs, or changelog

Link to Devin session: https://nasa-jpl-demo.devinenterprise.com/sessions/18ad47adf36f44e9b6824a4472f9678d
Open in Devin Desktop: https://nasa-jpl-demo.devinenterprise.com/desktop/session/18ad47adf36f44e9b6824a4472f9678d?variant=devin
Requested by: @NicolasRouquette


🔄 Devin is fixing 3 findings · Follow Devin's work

Devin Review

…he native walk — nameless ReferenceUsages through an EndFeatureMembership each, named by the happensBeforeLinks end they redefine, the target end reference-subsetting the member it reaches — as the RDF writer mints them and the pilot exports them

Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

devin-ai-integration Bot and others added 2 commits November 12, 2026 10:39
…n-end-memberships

Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>

# Conflicts:
#	internal/doc/queryexec/elementids.go
…he succession writes for it — the source multiplicity on the source end, the crossing one on the target end — so it states [0..1] rather than the implied [1..1], as the conversion and the pilot do

Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>

This branch has not been deployed

No deployments
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.

1 participant