Skip to content

fix(semantics): a satisfy usage's by subject varies in time and owns the FeatureValue binding it to its by value, as the conversion writes them - #1837

Merged
HuiJun merged 5 commits into
developfrom
fix/satisfy-subject-value
Nov 2, 2026
Merged

HuiJun merged 5 commits into
developfrom
fix/satisfy-subject-value

Conversation

@devin-ai-integration

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

Copy link
Copy Markdown
Contributor

What and why

The subject parameter a satisfy requirement r : R by sys declares (an unnamed ReferenceUsage owned through a SubjectMembership, #1806) read natively with isVariable = false and owned no membership, while the RDF export states isVariable/mayTimeVary true for it (a referential usage of the satisfy usage, an Occurrence) and a FeatureValue binding it to sys — two measured cross-ledger disagreements in qvts (Cross_ReferenceUsage_isVariable and _ownedRelationship of Observatory__observatory___400_subject). The subject's declaration is the by Relationship node, which Usage::mayTimeVary, Feature::isVariable and the value-part reader did not recognise. They now do: the subject derives mayTimeVary (and so isVariable) from its owning satisfy usage like every other parameter — on both derivations, UsageMayTimeVary and UsageMayTimeVaryForOwningType — and its value part is the by target, so ValueExpression and OwnedMemberships yield the FeatureValue the conversion writes.

A chained subject (by sys.sub) is written as the pilot grammar spells it (SysML.xtext SatisfactionReferenceExpression): a FeatureReferenceExpression owning a chain Feature at referent (OwningMembership + one FeatureChaining per link), then its result — not the FeatureChainExpression a chained value elsewhere is. The reflective read mirrors that shape for a subject's chained value (metaclass, referent, owned memberships, chainings), and the id reader registers the value, chain Feature, chainings and result under the ids the writer mints, so the two ledgers agree element for element.

Specification basis

SysML v2 8.3.19 (SatisfyRequirementUsage, the by clause binds the subject parameter), 8.3.6.4 (Usage::mayTimeVary), KerML 8.3.3.3.5 (Feature::valuation subsets ownedMembership). No spec-compliance row moves.

How it was verified

  • TestSatisfySubjectMembershipIsOwned extended: UsageMayTimeVary, FeatureIsVariable and the reflective isVariable read true; ValueExpression(subject) is the by value and the subject's one owned membership is the FeatureValue owning it (all fail before this change).
  • New TestSatisfySubjectValueReadsAsTheConversionWritesIt (export parity): for by sys and by sys.sub, the native value's metaclass, owned-membership classes, referent, chaining features and the ids of the value, chain Feature and FeatureChainings equal the written graph's (fails without the reflective mirror).
  • go build ./..., go vet, gofmt -l . empty; go test ./internal/semantic/... ./internal/doc/... ./internal/translate/export/... ./tests/export/... green. The writer is unchanged — only the id reader (recordSatisfySubjectValue) learns the ids the writer already mints — so the api-json baseline moves by its provenance digest alone.

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 Review

…the FeatureValue binding it to its by value, as the conversion writes 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]

This comment was marked as resolved.

devin-ai-integration Bot and others added 2 commits November 2, 2026 02:55
…erenceExpression owning its chain Feature at referent, as the conversion writes it; both mayTimeVary derivations admit the subject; parity test

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

This comment was marked as resolved.

devin-ai-integration Bot and others added 2 commits November 2, 2026 04:36
…t-value

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

# Conflicts:
#	docs/project/api-json-differential-baseline.json
…s — the by clause and its target share a span, so the value is recorded as the clause's value part and the span fallbacks tell them apart; test; baseline re-recorded over the develop merge

Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>
@HuiJun
HuiJun merged commit 89090ec into develop Nov 2, 2026
30 checks passed
@HuiJun
HuiJun deleted the fix/satisfy-subject-value branch November 2, 2026 06:40
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.

2 participants