Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
fdde672
fix(parser): reject frame, filter and accept members outside the bodi…
devin-ai-integration[bot] Oct 4, 2026
ef0f402
fix(stdlib): declare the OpenSysML extension libraries as non-standard
devin-ai-integration[bot] Oct 4, 2026
d53f0dd
docs(changelog): narrow the target-succession entry to the one-name t…
devin-ai-integration[bot] Oct 4, 2026
906f725
docs(changelog): state the RDF consequence of the non-standard librar…
devin-ai-integration[bot] Oct 4, 2026
07f5c92
test(runtime): declare accept receivers in action bodies
devin-ai-integration[bot] Oct 4, 2026
8b8e2db
Merge remote-tracking branch 'origin/develop' into fix/view-body-fram…
devin-ai-integration[bot] Oct 4, 2026
9ebcf0f
Merge remote-tracking branch 'origin/develop' into fix/view-body-fram…
devin-ai-integration[bot] Oct 4, 2026
36a7d75
Merge remote-tracking branch 'origin/develop' into fix/view-body-fram…
devin-ai-integration[bot] Oct 5, 2026
50515a3
chore(oracle): re-record pilot baselines after merging develop
devin-ai-integration[bot] Oct 5, 2026
662dac3
Merge remote-tracking branch 'origin/develop' into fix/view-body-fram…
devin-ai-integration[bot] Oct 5, 2026
220898c
Merge remote-tracking branch 'origin/develop' into fix/view-body-fram…
devin-ai-integration[bot] Oct 12, 2026
e90d03f
docs(changelog): note that a frame in a view body is now a parser error
devin-ai-integration[bot] Oct 12, 2026
f9cd407
Merge remote-tracking branch 'origin/develop' into fix/view-body-fram…
devin-ai-integration[bot] Oct 18, 2026
5ed694a
fix(check): reset body flags when the notation walker enters a nested…
devin-ai-integration[bot] Oct 18, 2026
3660767
Merge remote-tracking branch 'origin/develop' into fix/view-body-fram…
devin-ai-integration[bot] Oct 18, 2026
1681853
style(check): keep the notation walker comments to two lines
devin-ai-integration[bot] Oct 18, 2026
8090a56
Merge remote-tracking branch 'origin/develop' into fix/view-body-fram…
devin-ai-integration[bot] Oct 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .agents/skills/testing-pilot-rejection/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Sibling of `testing-pilot-differential` and `testing-pilot-xpect` (same pin
`scripts/pilot-pin.sh`, same committed-baseline shape), but pointed the other way: the
differential measures what the reference accepts and we reject; this oracle measures what the
reference **rejects and we accept** — permissiveness gaps. Its corpus is committed under
`tools/referee/reject/testdata/negative/` (323 hand-written invalid models, one violated rule + citation
`tools/referee/reject/testdata/negative/` (328 hand-written invalid models, one violated rule + citation
in each file's mandatory `// Invalid: ...` first line), so no corpus download exists. Method and
findings: `docs/project/pilot-rejection.md`.

Expand All @@ -36,7 +36,7 @@ succession rules, the feature-value overriding rule, the enumeration-variation r
the metadata typing, annotated-element and body rules, the trigger-argument typing rules, the owning-body member rules, the cross-subsetting rules, the variant port rule, the association arity, binary-link end
count and multiplicity-bound typing rules, the result-expression ownership rules, and the annotation-ownership, binding-arity, feature-chain conformance,
conjugated typing and end-feature rules, the end-multiplicity, return-owner and single-conjugator rules, the keyword-first relationship end kinds, the prefix and body-context cases, the redefinition name-resolution cases, the transition accept usage-typing rule, the connector-end accessibility of a qualified definition feature, and the Feature-typed targets of a subsetting or redefinition in a SysML source), with a fresh library cache:
`323 case(s): 314 both reject, 0 only the pilot rejects, 9 only we reject, 0 both accept`,
`328 case(s): 319 both reject, 0 only the pilot rejects, 9 only we reject, 0 both accept`,
byte-identical to the committed baseline. Any `both accept` case is a bug in the corpus (the case
is not actually invalid under the loaded standard library) — fix the case, never ignore it. A
candidate the pilot accepts because it does not enforce the named constraint is not a case either:
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/testing-sysml-repl/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -4351,7 +4351,7 @@ Read-only printer of the session buffer or one element:
`satisfy structure (from Demo::StructureView): violated` and one line per concern
(`conforms` / `violated` naming the exposed element and condition / `unevaluable` + reason); the
view frames nothing itself — every concern the viewpoint frames is evaluated against what it exposes,
and a `frame` written in a view body draws a `nonstandard-notation` warning.
and a `frame` written in a view body is a parser error.
A satisfy target that is a `requirementUsage` is diagnosed at load *and* reported as
`unevaluable (satisfy target spec is a requirementUsage, not a viewpoint)` — never a silent pass.
`%view` registers no object: `%instances` afterwards says none created, a repeat is identical, and a
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -348,8 +348,8 @@ The project is under active development, with the core infrastructure operationa
- **Corpus agreement:** 358 of 397 files agree diagnostic-by-diagnostic; 315 diagnostics are ours alone and 93 the reference's alone, and the first number must be read by root: the aggregate includes candidate conformance differences, intentional execution-scope warnings on reference corpora and diagnostics from our own examples ([differential](docs/project/pilot-differential.md), `go run -C tools ./cmd/pilot-diff`).
- **Declared-diagnostic silence:** of the 512 declared `errors` rows in the reference's own Xpect suites, we report nothing for 0. 245 we report word-for-word; 248 wording-only and 7 location-only differences are agreement in substance and are not counted as gaps; 0 more we report as a warning and 2 elsewhere in the file ([Xpect oracle](docs/project/pilot-xpect.md), `go run -C tools ./cmd/pilot-xpect`).
- **Scope agreement:** 230 of 230 declared scope assertions match exactly (same source).
- **Permissiveness gaps:** of 323 invalid models we wrote ourselves, the reference rejects 4 that we accept by default, and 310 both reject; 4 further cases agree only when we are asked strictly. We authored every one of these cases ourselves, so the denominator measures the reach of our own corpus and not our conformance; agreement reached only under an opt-in strict mode is weaker evidence than agreement by default ([rejection oracle](docs/project/pilot-rejection.md), `go run -C tools ./cmd/pilot-reject`).
- **Declared errata:** the registry declares 13 defect(s) in the published reference material — 6 with a specification-derived correction, 7 documented without one, since no intended reading can be inferred ([OMG issues](docs/project/omg-issues.md), `tools/oracle/errata`). Every figure above is as published and stays the conformance statement; running the same oracles over the corrected text instead reports 359 of 397 files agreeing, 314 diagnostics ours alone and 93 the reference's alone, 0 declared rows we are silent on, and 0 of 323 authored cases the reference alone rejects. The corrected figures are diagnostic only: an erratum never reclassifies a divergence category, and the published corpus is never edited.
- **Permissiveness gaps:** of 328 invalid models we wrote ourselves, the reference rejects 4 that we accept by default, and 315 both reject; 4 further cases agree only when we are asked strictly. We authored every one of these cases ourselves, so the denominator measures the reach of our own corpus and not our conformance; agreement reached only under an opt-in strict mode is weaker evidence than agreement by default ([rejection oracle](docs/project/pilot-rejection.md), `go run -C tools ./cmd/pilot-reject`).
- **Declared errata:** the registry declares 13 defect(s) in the published reference material — 6 with a specification-derived correction, 7 documented without one, since no intended reading can be inferred ([OMG issues](docs/project/omg-issues.md), `tools/oracle/errata`). Every figure above is as published and stays the conformance statement; running the same oracles over the corrected text instead reports 359 of 397 files agreeing, 314 diagnostics ours alone and 93 the reference's alone, 0 declared rows we are silent on, and 0 of 328 authored cases the reference alone rejects. The corrected figures are diagnostic only: an erratum never reclassifies a divergence category, and the published corpus is never edited.
- **Self-assessed surface:** the action, state-machine and classifier-behavior rows have no external referee at all — the four refereed figures above cannot see them, because the pinned artifact evaluates expressions but executes neither actions nor state machines. [Spec compliance](docs/project/spec-compliance.md) counts them.

What these numbers cannot show: the OMG corpora are demonstrations rather than an official conformance suite; the differential is one-directional, comparing the diagnostics the two implementations report on the same files; the Xpect suites are the pilot authors' test intent rather than a certification oracle; and none of these is a percentage of the specification — no global compliance figure is claimed anywhere.
Expand All @@ -362,7 +362,7 @@ What these numbers cannot show: the OMG corpora are demonstrations rather than a
**Parser coverage:** 110/110 bundled library files parse cleanly — the 94 official SysML v2 standard library files and the 16 non-normative OpenSysML extensions: `OpenSysML Libraries/AnalysisRecords.sysml`, `DiagramLayout.sysml`, `DocumentQueries.sysml`, `IdentityMetadata.sysml`, `MOSA.sysml`, `MigrationMetadata.sysml`, `OOSEM.sysml`, `OpenSysMLMathFunctions.kerml`, `OpenSysMLRenderings.sysml`, `RandomFunctions.kerml`, `Simulation.sysml`, `StateActivity.kerml`, `StateMachines.sysml`, `StateSpaceIntegration.sysml`, `Stochastic.sysml` and `SysMLValidation.sysml`. Conformance verified by [stdlib_conformance_test.go](internal/workspace/libs/stdlib_conformance_test.go). Grammar reference: [OMG Xtext grammar](https://github.com/Systems-Modeling/SysML-v2-Pilot-Implementation/tree/master/org.omg.kerml.xtext/src/org/omg/kerml/xtext).
**Behavioral execution:** Calc/constraint/requirement/satisfy functional. Action/state executors handle nested invocation, control flow keywords, loop and conditional statements and the send statement (<!-- doc-counts:begin conformance-passing -->every conformance case passing<!-- doc-counts:end conformance-passing -->). Coverage is self-assessed against the specification text and the normative library: the pinned OMG pilot implementation evaluates expressions but does not execute actions or state machines headlessly, so no external implementation currently adjudicates these rows. See [spec compliance](docs/project/spec-compliance.md).
**Reference differential:** 397 files compared diagnostic-by-diagnostic against the pinned OMG pilot implementation (`2026-08`), 358 in full agreement; every divergence is enumerated and adjudicated in [the differential](docs/project/pilot-differential.md), reproducible with `go run -C tools ./cmd/pilot-diff`.
**Rejection oracle:** the reverse direction — do we reject what the reference rejects? 323 hand-written invalid models validated by both implementations, 314 rejected by both, 0 the pinned pilot rejects and we accept; the remainder only we reject — the control-node succession rules the pinned pilot leaves unimplemented and a non-Boolean succession guard it accepts once the standard library types it — and every permissiveness gap is enumerated with a reproducer and likely root cause in [the rejection oracle](docs/project/pilot-rejection.md), reproducible with `go run -C tools ./cmd/pilot-reject`. We wrote every case, so the count measures our coverage of the rejection surface, not our conformance — a sample, not a proof.
**Rejection oracle:** the reverse direction — do we reject what the reference rejects? 328 hand-written invalid models validated by both implementations, 319 rejected by both, 0 the pinned pilot rejects and we accept; the remainder only we reject — the control-node succession rules the pinned pilot leaves unimplemented and a non-Boolean succession guard it accepts once the standard library types it — and every permissiveness gap is enumerated with a reproducer and likely root cause in [the rejection oracle](docs/project/pilot-rejection.md), reproducible with `go run -C tools ./cmd/pilot-reject`. We wrote every case, so the count measures our coverage of the rejection surface, not our conformance — a sample, not a proof.
**Training examples:** 100/100 files report no semantic errors, gated by `tests/corpus/testdata/training_examples_expected.txt`; the gate does not count execution-scope warnings. Download with `./scripts/download-training-examples.sh` (from the [OMG training directory](https://github.com/Systems-Modeling/SysML-v2-Pilot-Implementation/tree/master/sysml/src/training)). See [training examples](docs/project/training-examples.md) for analysis.
**Semantic layer:** a complete implementation of runtime operators, feature chains and validation rules. See [examples/semantic-layer/](examples/semantic-layer/) for a full demonstration.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- **Declare the bundled OpenSysML extension libraries as non-standard.** `DiagramLayout`, `IdentityMetadata`, `MigrationMetadata` and `SysMLValidation` were written `standard library package`, which both asserted membership of the normative Kernel/SysML libraries and drew a pilot warning (`User library packages should not be marked as standard`); they are project extensions and now read `library package`. RDF export no longer marks them `sysml:isStandard true`.
3 changes: 3 additions & 0 deletions changes/unreleased/view-body-member-grammar.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- **Reject `frame`, `filter` and `accept` members written outside the bodies that own them.** A `frame` is a RequirementBodyItem — a requirement, concern or viewpoint body, never a view's; a `filter` is a PackageBodyElement and a view/view-def body item — a package or the file root admits it, a viewpoint, rendering or part-def body does not; an `accept` is an ActionBodyItem — an action, calculation or case body (and the state body that already read it), not a view or part def. Each is now reported at the member instead of parsing silently, matching the reference grammar. A `frame` in a view definition or usage body, which 0.10.0 parsed with a `nonstandard-notation` warning (an error only under `-strict`), is now a parser error in every mode, since `FramedConcernMember` appears only in `RequirementBodyItem`.
- **Report `then <target>;` written outside an action or state body.** A target succession sequences members of an action, calculation or case body, and a state body reads it as a target transition; anywhere else it is OpenSysML extension notation, warned by default and rejected under `-strict`.

4 changes: 2 additions & 2 deletions docs/internals/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -862,8 +862,8 @@ Every behavioral feature must have:
- **Corpus agreement:** 358 of 397 files agree diagnostic-by-diagnostic; 315 diagnostics are ours alone and 93 the reference's alone, and the first number must be read by root: the aggregate includes candidate conformance differences, intentional execution-scope warnings on reference corpora and diagnostics from our own examples ([differential](../project/pilot-differential.md), `go run -C tools ./cmd/pilot-diff`).
- **Declared-diagnostic silence:** of the 512 declared `errors` rows in the reference's own Xpect suites, we report nothing for 0. 245 we report word-for-word; 248 wording-only and 7 location-only differences are agreement in substance and are not counted as gaps; 0 more we report as a warning and 2 elsewhere in the file ([Xpect oracle](../project/pilot-xpect.md), `go run -C tools ./cmd/pilot-xpect`).
- **Scope agreement:** 230 of 230 declared scope assertions match exactly (same source).
- **Permissiveness gaps:** of 323 invalid models we wrote ourselves, the reference rejects 4 that we accept by default, and 310 both reject; 4 further cases agree only when we are asked strictly. We authored every one of these cases ourselves, so the denominator measures the reach of our own corpus and not our conformance; agreement reached only under an opt-in strict mode is weaker evidence than agreement by default ([rejection oracle](../project/pilot-rejection.md), `go run -C tools ./cmd/pilot-reject`).
- **Declared errata:** the registry declares 13 defect(s) in the published reference material — 6 with a specification-derived correction, 7 documented without one, since no intended reading can be inferred ([OMG issues](../project/omg-issues.md), `tools/oracle/errata`). Every figure above is as published and stays the conformance statement; running the same oracles over the corrected text instead reports 359 of 397 files agreeing, 314 diagnostics ours alone and 93 the reference's alone, 0 declared rows we are silent on, and 0 of 323 authored cases the reference alone rejects. The corrected figures are diagnostic only: an erratum never reclassifies a divergence category, and the published corpus is never edited.
- **Permissiveness gaps:** of 328 invalid models we wrote ourselves, the reference rejects 4 that we accept by default, and 315 both reject; 4 further cases agree only when we are asked strictly. We authored every one of these cases ourselves, so the denominator measures the reach of our own corpus and not our conformance; agreement reached only under an opt-in strict mode is weaker evidence than agreement by default ([rejection oracle](../project/pilot-rejection.md), `go run -C tools ./cmd/pilot-reject`).
- **Declared errata:** the registry declares 13 defect(s) in the published reference material — 6 with a specification-derived correction, 7 documented without one, since no intended reading can be inferred ([OMG issues](../project/omg-issues.md), `tools/oracle/errata`). Every figure above is as published and stays the conformance statement; running the same oracles over the corrected text instead reports 359 of 397 files agreeing, 314 diagnostics ours alone and 93 the reference's alone, 0 declared rows we are silent on, and 0 of 328 authored cases the reference alone rejects. The corrected figures are diagnostic only: an erratum never reclassifies a divergence category, and the published corpus is never edited.
- **Self-assessed surface:** the action, state-machine and classifier-behavior rows have no external referee at all — the four refereed figures above cannot see them, because the pinned artifact evaluates expressions but executes neither actions nor state machines. [Spec compliance](../project/spec-compliance.md) counts them.

What these numbers cannot show: the OMG corpora are demonstrations rather than an official conformance suite; the differential is one-directional, comparing the diagnostics the two implementations report on the same files; the Xpect suites are the pilot authors' test intent rather than a certification oracle; and none of these is a percentage of the specification — no global compliance figure is claimed anywhere.
Expand Down
2 changes: 1 addition & 1 deletion docs/project/pilot-differential-baseline.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions docs/project/pilot-differential.md
Original file line number Diff line number Diff line change
Expand Up @@ -314,8 +314,8 @@ admits `frame` (FramedConcernMember, §8.3.20/§8.3.26) only in a requirement, c
body, and the reference failed to parse each of those lines (`mismatched input 'frame' expecting
'}'`, then `extraneous input '}' expecting EOF`): two `syntax` rows per demo. The evaluator now
checks every concern a viewpoint frames directly against what the view exposes, the three demos drop
the view-body framings with their `%view` output unchanged, and a `frame` left in a view body draws
the `nonstandard-notation` warning that `-strict` escalates to an error, as the reference rejects it.
the view-body framings with their `%view` output unchanged, and a `frame` left in a view body is a
parser error, as the reference rejects it.
The six `syntax` rows go, the three demos become fully agreeing, and `examples` keeps only the 37
`DocumentQueries` binding warnings and the 17 duplicate-inherited-name warnings on the pilot side.

Expand Down
Loading
Loading