Skip to content

feat(queryexec): Project and WhereFeature tell a feature the element lacks from one that is empty — a missing-feature path error with the QVTS record, tolerate to keep the empty cell - #1577

Merged
NicolasRouquette merged 9 commits into
developfrom
feature/query-missing-feature
Oct 27, 2026

Conversation

@devin-ai-integration

Copy link
Copy Markdown
Contributor

What and why

Reading a feature of an element row that has none so named was an empty cell, indistinguishable from a feature present and unvalued — the A->B->C ambiguity QVTS set out to remove. Now:

  • Project/WhereFeature on a property some rows carry and an element row lacks fail with missing-feature, naming the element, the feature and the features it does have (Error.Target, Property, Candidates; library-inherited features filtered out) and carrying the QVTS record: Feature(<name>) step, expected: a feature named <name> on the element, frontier at the element with its typed features and the nearest spelling.
  • A property no row carries stays unknown-property (a misspelling, not a mixed source).
  • tolerate = true on either operation keeps the empty cell for sources that mix element kinds; the cookbook's MassTable/MassBudget, the analysis-results provenance table (a -record-run run carries command in metadata only) and three fixtures reading a part feature off a connection opt in.
  • Metadata paths (Tag::key) are unchanged — an annotation is optional by nature — recorded as the remaining row in docs/internals/design/query-outcomes.md.

The tolerate : Boolean[1] default false parameter lives in the Extensions Library (Open-MBEE/OpenSysML-Extensions-Library#14, merged); this PR re-pins the vendored copy at 745963b via scripts/sync-extension-libraries.sh. The default reverses what three in-repo fixtures recorded ("Vehicle's features are absent on spare, not errors"); that is the fail-closed decision of the QVTS design, carried as MAJOR on the library side.

Specification basis

Not a SysML v2 clause: QVTS-Core outcome semantics (Open-MBEE/qvts docs/qvts-core.md §6.3, lean/QVTS/Outcome.lean). No row of docs/project/spec-compliance.md moves.

How it was verified

  • internal/doc/queryexec/missing_feature_test.go: Masses/HeavyOnes → missing-feature at Observatory::root::b with frontier mas, volume, the record's step/expected/frontier/nearest, the message; ToleratedMasses/ToleratedHeavyOnes keep rows with an empty cell; ToleratedAbsent → unknown-property.
  • Existing suites adjusted where the default moves them: derived_test, memberpath_test, objects_test, docrender_test (tolerate), queryplan positional-surplus test (one more parameter).
  • Locally: go test ./internal/doc/queryexec/ ./internal/frontend/repl/ ./internal/frontend/grpc/ ./internal/ir/queryplan/ ./cmd/sysml/ ./tests/hygiene/ ./tests/kpar/ ./tests/migrate/ pass; go vet, staticcheck, gofmt clean; scripts/sync-extension-libraries.sh --check clean at the new pin.

Checklist

  • make test and make lint pass locally (the packages touched; full tier in CI)
  • Tests added or updated for the change
  • Documentation extended where it already covers the surface (docs/manual/query-cookbook.md, docs/internals/design/query-outcomes.md, examples/analysis-results-demo/README.md)
  • Changelog entry added as changes/unreleased/query-feature-outcomes.changed.md
  • No gate count moved
  • No internal work-item labels 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-ai-integration Bot and others added 5 commits October 27, 2026 13:21
…rate (745963b)

Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>
…lacks from one that is empty, with tolerate to keep the empty cell

Reading a feature of an element row that has none so named was an empty cell, indistinguishable from a feature present and unvalued. It is now a missing-feature error naming the element, the feature and the features the element does have (Error.Target, Property, Candidates), a path error about that element; a property no row carries stays unknown-property.

tolerate: Boolean default false on Project and WhereFeature keeps the empty cell for sources that mix element kinds; the cookbook's MassTable and MassBudget use it, as do the fixtures that read a part's feature off a connection. Metadata paths (Tag::key) are unchanged: an annotation is optional by nature, recorded as the remaining item in query-outcomes.md.
Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>
…he test-file line cap

Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>
…— Feature(name) step, the element and its typed features as frontier

Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>
…orded run that carries command in its metadata only

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 October 27, 2026 13:36
… the self-model's sparse filters tolerate

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

Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>
@NicolasRouquette
NicolasRouquette marked this pull request as ready for review October 27, 2026 14:41
…the re-pinned libraries and the examples that now say tolerate

pilot-diff totals reproduce the committed baseline exactly; the API JSON differential moves only in the examples and manual-examples roots the tolerate arguments touch, and in the pilot's count of library elements.

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

This comment was marked as resolved.

…nt from the record, not the last name of the member reached

Co-Authored-By: Nicolas Rouquette <nicolas.f.rouquette@jpl.nasa.gov>
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