Repository navigation
fix(model): risk gate over every item, TH-001 causes, derived safety-critical count, document inventory queries - #44
Merged
Conversation
…critical count, document inventory queries Review triage findings 3-2, 3-3, 3-4, 3-5, 5-2, 5-3, 5-5 and the integration-review documentation nits. - 3-2 TethysRisk::riskRegister::noUnownedRedRisk quantifies over the new items : RiskItem[*] collection every register entry subsets, instead of naming earthImpactRisk; risk-constraints instantiates the register so the gate evaluates on it. - 3-3 TH-001's returnTrajectoryInsideCorridor and lossOfThrustOnFinalArc causes are connected to earthImpact like the other hazards. - 3-4 safetyCriticalSoftwareFunctions = 2 is replaced by the query TethysAllocationQueries::SafetyCriticalFunctions over @safetycritical. - 3-5 Reliability durations are DurationValues in [d] and [h]. - 5-2 TugSubsystems reads TethysTug::Tug (10 rows, was 4). - 5-3 Segments and Items exclude InterfaceUsage / InterfaceDefinition. - 5-5 Risks scans TethysRisk and TethysSafety (6 rows, was 0). - docs: IcdFlightSegment::inspectorDispenser, SE-049/SE-260/SE-278 rows say what the model shows, KerML citation §8.3.2.4.5. Co-Authored-By: jason.han <hanhuijun@gmail.com>
Contributor
Author
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
The inventory of @safetycritical functions showed documentation = (none) for all three rows; the reason for each classification lives in SafetyCritical::rationale, so the query projects that instead. Re-recorded allocations-queries. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…documents Co-Authored-By: jason.han <hanhuijun@gmail.com> # Conflicts: # runs/house-rules.txt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the review-triage findings 3-2, 3-3, 3-4, 3-5, 5-2, 5-3 and 5-5 (WP-J safety/risk/allocations, WP-K views/documents) and the documentation nits from the integration review. Each finding was reproduced on the pinned OpenSysML (5cd37f288) on
developbefore the fix; probes below arebuild/opensysml/sysml … model/*.Not touched (maintainer decisions still open): 3-6 risk grid vs value table, 5-1
FlightPhasesinterleaving, 5-4BudgetView/massBudget.Findings
noUnownedRedRisknamesearthImpactRiskonly; a /tmp copy forcingxenonMarginRisktocatastrophic(rating red, status open) stillpassed✗ … noUnownedRedRisk failed — Assertion evaluated to false: forAll(body); committed valuespassed (on TethysRisk::riskRegister ID: 1)riskRegistergetspart items : RiskItem[*], every entry:> items, and the gate isitems->forAll { in risk : RiskItem; not (risk.rating == red and risk.status == open) }— a seventh entry is checked without touching the gate.[*]has no fixed count outside an instance, sorisk-constraintsnow-instantiates the register and evaluates the gate on itgrep -c "connect earthImpactByTarget."= 1 (erroneousFinalTargetingonly; TH-001 declares three#causes)#causation connects, as in the closed #32safetyCriticalSoftwareFunctions : Natural = 2whilegrep -c @SafetyCritical= 3TethysAllocationQueries::SafetyCriticalFunctions root=TethysSafety::safetyCriticalSoftwarereturns 3 rows (finalTargetingGuidance,captureAbortLogic,highVoltageInhibitLogic)WhereMetadataoverDescendants(root)forTethysSafety::SafetyCritical, projectingnameandSafetyCritical::rationale(the reason each function is classified; a Devin Review finding caught the first version projectingdocumentation, which is empty on all three); recorded inallocations-queriesmissionHours … thrusterStringMttfHours : RealmissionDuration = 2200.0 [d],thrustDuration = 1100.0 [d],structureMttf = 2.0e6 [h], … :DurationValue;structureMttf / missionDuration = 1250/33,structureReliability = 0.97394…,sepReliability = 0.92267…,missionReliability = 0.74046…(unchanged),reliabilityAllocationMet passedTethysDocuments::TugSubsystems4 rows (argent's redefinitions)structure … sensors, typed)TethysTug::TugminusInterfaceUsage, as in the closed #34Segments9 rows (5 parts + 4 interfaces),Items19 rows (7 item defs + 12 interface defs)Segments5,Items7Except(… WhereType(…, "InterfaceUsage"))/Except(… WhereType(…, ("PartDefinition", "InterfaceDefinition"))), as in the closed #34.PortDefinitionis not anItemDefinition, so no port def was inItemsRisks0 rows (theUnionof four consumer packages never scansTethysRisk)WhereMetadata(Descendants(Named(("TethysRisk", "TethysSafety"))), "RiskMetadata::Risk")— the packages that ownRiskItems, not the consumer listAbsorbed from the closed drafts: 3-3 and 3-5 from #32, 5-2 and 5-3 from #34 — nothing else (not #32's six-name enumeration for 3-2, not
= 3for 3-4, not itsenvelopeCasesrewrite, none of their 3-6 / 5-1 / 5-4 changes).Documentation
docs/coverage/WP-D.mdSE-101/SE-103:IcdFlightSegment::dispenser→inspectorDispenser(model 51 redefinesinspectorDispenser; there is nodispenser).docs/coverage/WP-D.mdSE-278: "satisfied" → "partially satisfied" —ContingencyProcedure::failureModeis aString; no element links a response to a WP-J FMECAFailureMode.docs/coverage/WP-E.mdSE-260: tenPhaseCriteriarows cover ten of the twelveflightTimelinephases —integrationAndTestandextendedMissionhave none (the row claimed "every phase" and misnamed the uncovered pair).docs/coverage/WP-A.mdSE-049: the binding exists, but no recordedsatisfyreads throughtethysSystem.flight.tug; said so.docs/findings/WP-A.md,WP-H.md: KerML 1.1 §8.3.2.5 → §8.3.2.4.5 (bothvisibleMembershipsandvalidateNamespaceDistinguishabilitysit under 8.3.2.4 Namespaces).Model files
model/85-safety.sysml,model/86-risk.sysml,model/87-allocations.sysml,model/87-allocations-tooling.sysml,model/91-documents.sysml,scripts/runs.sh(risk-constraints,allocations-queries).Runs moved (15 files,
make runsfrom the merged tree)risk-constraints:noUnownedRedRisk passed (on TethysRisk::riskRegister ID: 1)after the newCreated instancelines.registerBurningDown/earthImpactBurningDownstay not covered as on develop; only their reason text changes (no value: condition is undetermined: consequence has no value→feature value atPdr.score: calc TethysRisk::Score … no value for feature consequence) because the register instance now exists in the same process.allocations-queries: +SafetyCriticalFunctions3 rows.document-queries:Risks0 → 6 rows;Segments9 → 5;Items19 → 7;TugSubsystems4 → 10.render-documents-md/html,documents/*,documents-html/*(InterfaceControlDocuments: Items table loses the 12 interface definitions, which the "Interface definitions" section already lists;RiskRegister: 6 rows instead of empty;SystemDescription: 5 segments, 10 tug subsystems),render-allandviews/TethysRisk.riskRegisterView~…md,risk-register-view: one newitemsrow.house-rules: 80537 → 80560 elements, 703451 → 703618 checks, 0 violations, 0 unevaluated.Behaviour changes
No recorded verdict flips.
noUnownedRedRisknow fails on any red+open entry (it passed on the forced-red probe before). Element/check counts inhouse-rulesgrew withitems, the two connects and the query.Gates
make check(validate, pilot-mission, pilot-all, house-rules, runs-check) exit 0 andmake software-checkexit 0 (11 passed) on OpenSysML 5cd37f288 / go1.25.11 (runs/tool-version.txtunchanged). house-rules: 80560 elements, 703618 checks, 0 violations, 0 unevaluated. The pilot tiers were built with OpenJDK 21.Link to Devin session: https://nasa-jpl-demo.devinenterprise.com/sessions/74adb29eca264b2c915329a4bd614477
Open in Devin Desktop: https://nasa-jpl-demo.devinenterprise.com/desktop/session/74adb29eca264b2c915329a4bd614477?variant=devin
Requested by: @HuiJun
CI Status
0 passed, 0 failed, 5 pending (use
gitwith action=pr_checksfor full details)Pending: software-check, software-flight-check, check, software-ground-check, software-conformance-check
Conversation
4 comment(s)
--- Begin PR Conversation ---
[Commit] fix(model): risk gate over every item, TH-001 causes, derived safety-critical count, document inventory queries by devin-ai-integration[bot] (3123ac4)
[Comment 1 / 4] by devin-ai-integration[bot] | 2026-10-29T02:42:37+00:00 (comment id: 6486423724)
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
[Resolved] [Comment 2 / 4] by devin-ai-integration[bot] on model/87-allocations-tooling.sysml:66 | 2026-10-29T03:21:22+00:00 (comment id: 4408371198)
Note: This comment was made in the context of the file's PR diff. It is suggested that you view the diff with
git diff --merge-base develop fix/review-safety-documents -- model/87-allocations-tooling.sysmlPR review thread id: PRRT_kwDOVS_dXc6xZ1z5 (pass as resolve_thread_id to git_comment_on_pr to resolve this thread; not valid for in_reply_to)
Citing:
```diff
@@ -55,6 +55,17 @@ package TethysAllocationQueries {
relationshipKind = "allocation", direction = "outgoing", exists = false)
}
[Resolved] [Reply] [Comment 3 / 4] by devin-ai-integration[bot] on model/87-allocations-tooling.sysml:66 | 2026-10-29T03:49:11+00:00 (comment id: 4408498702)
Reproduced on the pinned tool: all three rows reported
documentation = (none)— the reason lives in the@SafetyCritical { rationale = ... }annotation, not in a doc comment. Fixed in 392d066: the query now projects("name", "SafetyCritical::rationale"), as theVerification::*projections elsewhere do, andruns/allocations-queries.txtis re-recorded with the three rationales (TH-001, TH-002, TH-006).make checkexit 0.[Review 4 / 4] by devin-ai-integration[bot] | 2026-10-29T03:21:23+00:00
State: COMMENTED
Devin Review found 1 potential issue.
[Commit] fix(model): project SafetyCritical::rationale in SafetyCriticalFunctions by devin-ai-integration[bot] (392d066)