Skip to content

docs(compliance): correct row texts and statuses from the clause-by-clause audit - #1531

Merged
HuiJun merged 2 commits into
developfrom
docs/spec-compliance-audit-corrections
Oct 26, 2026
Merged

HuiJun merged 2 commits into
developfrom
docs/spec-compliance-audit-corrections

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

What and why

docs/project/spec-compliance.md was audited clause by clause against the pinned SysML v2.1 Beta 2 / KerML 1.1 Beta 2 texts, the current tree and the pinned pilot. This change applies the documentation corrections that audit produced, as one commit on develop (the first pass, #1526, re-pointed paths and clause numbers; this one corrects what rows say). No implementation code changes; the rows that describe a gap now say so and the fixes are separate work.

Rows changed, by category (173 edits, plus the structural edits below):

  • Stale text corrected (DOC-STALE): 162 edits (several rows took more than one) — wrong clause numbers (KerML 1.0 numbering, SysML clauses that moved), renamed or removed Go symbols and test names, two library quotations that are not in the Beta 2 text, two edition stamps, the pilot pin (2026-08 / 0.62.0), stale counts, and internal work-item references rewritten as what the change did.
  • Status corrected (STATUS-WRONG): 3
    • Calculation purity: ✅ → ⚠️ Approximate. SysML v2 §7.19.1 only recommends that a calculation "should be pure" and allows action usages as steps; KerML §7.4.8.1 allows a function side effects. The row also dropped perform from the refused forms (a performed effect-free action runs; nothing tests the refusal the row claimed).
    • Bare import without a visibility indicator: ⚠️ → ✅ Faithful. SysML v2.1 Beta 2 §8.2.2.5.2 makes the indicator mandatory, import-visibility is reported (non-gating error at the syntax tier) and the indicator is honoured for visibility filtering.
    • gRPC Query: ✅ → ⚠️ Approximate. The standard's Query has seven PrimitiveConstraint operators and orderBy; =, <, > are implemented, <=, >=, in, instanceOf are refused as malformed and orderBy is absent.
  • Implementation gaps now stated truthfully (IMPL-GAP, text + ⚠️, no code change): 6
    • Default multiplicity: a KerML feature with no multiplicity is held to 1..1 (AssumedRange) where KerML §7.4.12 / §7.4.5.2 default to 0..*; the SysML §7.6.3 implicit [1..1] conditions are stated.
    • Nested subrequirements: not materialized into subrequirements/constraints, implicit subject not bound to the container's, verdict does not reach the container's result (SysML §7.21.2).
    • x + null / x - null: refused by the operator evaluator while the function form '+'(x, null) answers (KerML §8.4.4.9.6 makes the operator the invocation; y: [0..1]).
    • excludingAt with an end past the end or an inverted range: ErrIndexOutOfRange where the vendored library body answers the sequence unchanged.
    • Query PrimitiveConstraint operators: <=, >=, in, instanceOf unimplemented (API & Services §7.1.4).
    • Query.orderBy: unimplemented; the known-limitations list now says so.
  • Review finding fixed: the row on a one-ended first <node>; in a state body described constraint- and notation-tier diagnostics and cited CodeFirstNamesNoTarget / TestTransitionToFirstMarkerIsIllegal, neither of which exists. It now records the parser-level error[syntax] ("a one-ended first <node>; is only admitted by an action body; elsewhere a succession names both ends") with tests/parser/negative_test.go:TestNegative (one_ended_first_in_state_body), verified with sysml -validate.

Structural edits: six duplicate connector rows and one duplicate view-rendering row removed (the widest copies kept); the empty "Decisions to Reassess" table and its "issues disabled" sentence dropped (issues are enabled); the Lines column of the three implementation-file tables removed (2–6× stale, no gate keeps it); the bounds table gains OPENSYSML_MAX_INTEGER_BITS (eight bounds, not seven); the RPC table notes which RPCs are mapped elsewhere and which eight have no row yet.

Report proposals corrected against the evidence

  • Cast/classification rows keep their §8.4.4.9.2 cites (that clause's note — a finite literal is a Rational — is what they cite); only the nonexistent 8.3.4.9 CastExpression and 8.4.4.2 ClassificationExpression cites moved to §8.2.5.8.1 / §8.3.4.8.17 / §8.4.4.9.6.
  • Transition-scope row: executeAction does not exist in runtime/state_executor.go and was dropped with the other stale names.
  • View-rendering duplicates: the copy naming the case/mixed/DOT/PlantUML forms was kept and the "table or matrix"/GridView wording folded into it.
  • DesertKite prose re-measured on the InitialDesign branch: OOSEM.sysml is clean; DesertKite.sysml reports ten 'SysML Standard Diagrams'::gv references, one endpoint-not-a-node and one cross-file reference — not the three gv errors proposed — and its qualified bind ends and requirement-body connection connect parse.
  • API JSON round-trip row written without hard counts: the expectation file holds 832 stable / 8 whitespace-only / 1 unwritable / 38 refused:syntax / 1 graph-diff, not the proposed 830/7/1/38/0.

Decisions pending (status left unchanged; stale text only corrected)

  • Unbound calculation result: typed error (runCalcBody, errCalcNoReturn) vs no value — the specification is silent (KerML §7.4.8.2); the missing-return-expression row should carry the same answer.
  • Exit behaviour default payload (grounded on PSSM) and an unperformed owned action never running (grounded partly on fUML): re-ground on KerML §7.4.11 / SysML §8.4.7, §8.4.13.11, or mark as extension/approximate.
  • seq#(i) out of range: typed error here, null by the library bodies of head/last and the pilot.
  • Real finite-only: §9.3.2.2.9 defines the extended reals (±∞); the runtime's refusal of non-finite results is a tool decision the prose states as the specification's.
  • The four validation-rule sections and constraint-manifest.json are keyed to the pilot's constraint names and the formal 1.0/2.0 editions, not Beta 2 (renamed constraints, three Beta 2-only constraints satisfied by construction).
  • One-member CompositeConstraint: accepted as a degenerate conjunction vs refused per [2..*].

Overlap with other PRs and the develop merge

#1522, #1530, #1471 and #1484 landed in develop while this was open; origin/develop (11c4699) is merged in as a merge commit (no rebase). The one conflict was #1471's reworded HappensBefore partial-order row: develop's new row text is kept with this change's clause-number correction (§7.4.9 → §9.2.4 Occurrences, §9.2.6 Performances) re-applied to it. #1484's Census line and validatePartUsagePartDefinition row and #1530's checkConnectorTypeFeaturing row merged clean and are kept as develop has them. #1529 (pilot pin prose) is still open; one row here now names 2026-08 / 0.62.0, which agrees with it.

How it was verified

Every replacement was checked against the tree (grep for each path, symbol and test name) and the rendered specifications (build/spec-docs/sysml.txt, build/spec-docs/kerml.txt). Gates, all passing on the pushed commit:

go run -C tools ./cmd/doc-counts -check          → doc-counts: already current
go run -C tools ./cmd/validation-census -check   → 217 constraints, census document, compliance map and manifest agree
python3 scripts/check-doc-ids.py                 → No internal work-item labels in reader-facing documentation
python3 scripts/check-doc-links.py               → 0 broken link(s)
python3 scripts/check-doc-figures.py             → every quoted oracle figure names the round it measured
python3 scripts/changelog.py check               → exit 0
python -m mkdocs build --strict                  → Documentation built

Also checked by hand: sysml -validate on a state body with first a; (the syntax error above), the DesertKite models, and that every Status cell carries one marker and every | inside a code span in a table cell is escaped.

Checklist

  • make test and make lint pass locally (docs-only change; the seven documentation gates above)
  • Tests added or updated for the change (not applicable — documentation only)
  • 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/0cadee59142045a995c05b473ed44534
Open in Devin Desktop: https://nasa-jpl-demo.devinenterprise.com/desktop/session/0cadee59142045a995c05b473ed44534?variant=devin
Requested by: @HuiJun

…lause audit

Co-Authored-By: jason.han <hanhuijun@gmail.com>
@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
devin-ai-integration Bot marked this pull request as ready for review October 26, 2026 04:24

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

…ce-audit-corrections

Co-Authored-By: jason.han <hanhuijun@gmail.com>

# Conflicts:
#	docs/project/spec-compliance.md
@HuiJun
HuiJun merged commit 9bbb915 into develop Oct 26, 2026
21 checks passed
@HuiJun
HuiJun deleted the docs/spec-compliance-audit-corrections branch October 26, 2026 14:25
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