Repository navigation
Flow the design-consistency pass (#12) from integration/phase-3 into develop - #39
Merged
Merged
Conversation
…every consumer TethysMission::transferBook defines the arc Δv (2 800/150/160/40 m/s), the required return Δv (200 m/s), the 10 % missed-thrust allowance and the 1 400 day thrusting allowance once, with the rocket-equation derivation in its doc. The budgets, the low-thrust transfer analyses, the Monte Carlo dispersions, the specific-impulse trade, the tooling Monte Carlo and the architecture variants read it by reference instead of carrying their own 2 000/350 m/s, 300 kg reserve, 1 930/1 134 day and 1 180 kg values; the analyses start from the mass budget's launch mass and the propellant budget's usable xenon and aphelion thrust, so both books agree on which target cases return. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…n envelope at capture commit TethysTarget::targetCases is the single table of bodies (design cases small 213 t / nominal 362 t / large 506 t; knowledge bounds lightest 40 t, largest 987 t, densest 576 t; fastSpin and tumbling), each from diameter, density and spin through SphereMass; CaptureTargetCase binds them as variants. The budgets, the capture-system envelope cases, the mode machine's and the flight sequence's estimates, the transfer analyses, the Monte Carlo, the trades, the dynamics, the variants, the safety envelope, the stakeholder assumptions and TS-001 all read the table instead of carrying 217/507 t, 181/1 010 t, 105/1 335 t, 215/644 t or 5.0/7.7 m of their own. TethysBudgets::propellantBudget pins the return envelope by inverting the rocket equation (returnableBodyMass 542 t with the 15 % policy margin, 651.9 t with none) and captureCommitEnvelope takes the smaller of that and the bag's limit; the mode machine, the sequence and the proximity-operations commit decision refuse a body above it, so the densest body is refused and the large design case is accepted. The analyses and variants hold back the same system margin, so both books now agree on which bodies return. Finding F-F07 (evaluator step-limit on a chained PropellantFor inside a heavy-load configuration) is recorded with its probe. Co-Authored-By: jason.han <hanhuijun@gmail.com>
TethysTugStructure::TugMode is the single mode enumeration (the mode machine's fifteen literals plus earlyOperations) with the named sets thrustingModes, coastingModes, proximityModes and safeModes that every unit's operating and standby modes are built from. TethysModes drops its own enum and TethysOperations its CommandedMode; SetMode and CommandedTug carry TugMode. SubsystemConfiguration.busLoad defaults to TethysBudgets::TugPowerInMode(mode), so the mode table's sixteen rows and the power budget read the same per-unit rollup instead of fifteen unrelated literals. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…at 13.9155 d droRevolution, DroStabilityAnalysis::revolution and the tooling droRevolutionRk4 stopped at 3.20 time units with a 0.01 step while the orbit's period is 3.20467695, so the recorded closure was the arc still to fly, not a closure error. They now take 320 steps of one 320th of the period and stop at the period; the model's own RungeKutta4 stays in place. TethysEnvironment::destinationDro.period is 13.9155 d, the propagated value, with its derivation in the doc. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…m the budgets thermalBudget.hotCaseSolarFactor is the perihelion-over-aphelion solar flux ratio (about 1.13) in place of the bare 1.22; hydrazineBudget reads propellantBudget.tugMassAtTarget in place of launch mass less 700 kg; the flight sequence's xenon load and reserve come from the propellant budget. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…er book Mission duration 2 200 days (TR-002, mission doc), TS-003 reads the transfer book's thrust allowance, the heliocentric flux range as declared, the return-cruise xenon trend, the TH-001 body mass, the transfer-book case totals, the small-body domain list and the WP-F/WP-G coverage notes now carry the budget's numbers. Co-Authored-By: jason.han <hanhuijun@gmail.com>
… and DRO analyses Δv, thrust, mass flow, c and g₀ and the analysis-tier values of model/70–74 carry their ISQ quantity types (SpeedValue, ForceValue, MassFlowRateValue, AccelerationValue, PowerValue, DurationValue, LengthValue, MassValue, AngularVelocityValue, AngularMomentumValue, TorqueValue, MomentOfInertiaValue, MassDensityValue) in place of suffix-named Reals; the requirement defs the analyses check against take typed parameters, so the Monte Carlo objectives now bind the parameters the defs declare instead of adding new ones. The eight swept or sampled parameters stay Real with a doc comment: the sweep and sample runners write bare numbers to the parameter they draw, which a quantity-typed feature rightly refuses (new finding F-F08 with its probe and pinned run). Tool variables keep the ToolExecution contract; dB stays dimensionless by design. Every value evaluates to the same number as before. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…hanges Recorded with the pinned OpenSysML source build (0a5fa2d94). Every transfer, capture, Monte Carlo, trade and dynamics run now reads the single transfer book and target-case set; the DRO run closes over the full period; the dense-target mode and sequence runs replace the large-target mode run; the two F-F08 probe runs drop the wall-time column like the other sweeps. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…did not support SE-275 (as-flown values contradict the budgets), SE-156/157 (must rows awaiting the matrix owner's ruling) and the SE-105/128/129 range envelope are marked partial or open with the gap named; SE-152, SE-192, SE-194, SE-195, SE-130 and SE-081 cite the re-recorded runs; SE-123/124/125/134/145 state what the F-B01-fixed build shows (energy, thermal and margin policy close, power while thrusting does not); SE-263/264 and LANG-095/170/532 stay open with the reason. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…cle in pilot-mission The standalone pilot wrapper refuses .kerml before parsing (F-G01), so pilot-mission now also runs the batch validator over the mission-tier .kerml files against the standard library alone; the .sysml files still go through the standalone wrapper unchanged. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…sML clauses F-D03 (pilot right: checkConnectorTypeFeaturing with deriveUsageMayTimeVary), F-F06 (OpenSysML right: SysML 7.6.3 default multiplicity applies to attribute, item and port usages, not reference usages), F-F04 (under-specified: isDistinguishableFrom lets a Function and an AttributeUsage share a name), F-B03 (pilot right in substance: the two library redefinitions of Occurrence::this collide), F-G01 (closed: tooling, pilot-mission now gates the mission-tier KerML) and F-G03 (OpenSysML right: the pilot's errors are EMF reference-pairing failures, not KerML constraints). Model notes only; the F-xxx ids and probes are unchanged. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…s not depend on how the binary was built Co-Authored-By: jason.han <hanhuijun@gmail.com>
…largest case's own rotation period TS-019 despinCapacity, TS-014 proximityContactEnvironment and ContactSpeedTest read the largest knowledge-bound case's mass and diameter but divided by the design large case's 252 s period; they now use targetCases.largest.rotationPeriod (100 s). Momentum 222 238 -> 560 040 N m s, hydrazine 34.3 -> 86.5 kg against the 100 kg quarter load, surface speed 0.118 -> 0.298 m/s against 0.35 m/s: every verdict still holds, so no run moves. Co-Authored-By: jason.han <hanhuijun@gmail.com>
xenonTrend carried its own inventory, rate and days (5 235 kg, 5.2 kg/day, 1 000 days) and projected 35 kg against the 300 kg floor once the inventory followed the transfer book. It now reads TethysBudgets::propellantBudget: aboard = usable less the outbound and rendezvous arcs, rate = the SEP mass flow at aphelion per day, days = the thrusting days the nominal return and insertion arcs need with the missed-thrust allowance (returnArcsXenon). Margin -265 -> +2 058 kg; resourceMarginPositive by xenonTrend flips to holds in the four satisfy runs; house-rules element count +3; object ids shift in the satisfy runs. Co-Authored-By: jason.han <hanhuijun@gmail.com>
…in the xenon trend xenonTrend.current subtracted the nominal outbound and rendezvous xenon while returnArcsXenon carried the allowance, so the projection added the outbound allowance back (about 123 kg). Both terms now use the budget's case; projected equals propellantBudget.usable - xenonNominal (2 235 kg), margin 1 935 kg. No recorded verdict or run moves. Co-Authored-By: jason.han <hanhuijun@gmail.com>
* feat(model): one Δv and thrusting-time book in TethysMission read by every consumer TethysMission::transferBook defines the arc Δv (2 800/150/160/40 m/s), the required return Δv (200 m/s), the 10 % missed-thrust allowance and the 1 400 day thrusting allowance once, with the rocket-equation derivation in its doc. The budgets, the low-thrust transfer analyses, the Monte Carlo dispersions, the specific-impulse trade, the tooling Monte Carlo and the architecture variants read it by reference instead of carrying their own 2 000/350 m/s, 300 kg reserve, 1 930/1 134 day and 1 180 kg values; the analyses start from the mass budget's launch mass and the propellant budget's usable xenon and aphelion thrust, so both books agree on which target cases return. Co-Authored-By: jason.han <hanhuijun@gmail.com> * feat(model): one target-case table in TethysTarget and a pinned return envelope at capture commit TethysTarget::targetCases is the single table of bodies (design cases small 213 t / nominal 362 t / large 506 t; knowledge bounds lightest 40 t, largest 987 t, densest 576 t; fastSpin and tumbling), each from diameter, density and spin through SphereMass; CaptureTargetCase binds them as variants. The budgets, the capture-system envelope cases, the mode machine's and the flight sequence's estimates, the transfer analyses, the Monte Carlo, the trades, the dynamics, the variants, the safety envelope, the stakeholder assumptions and TS-001 all read the table instead of carrying 217/507 t, 181/1 010 t, 105/1 335 t, 215/644 t or 5.0/7.7 m of their own. TethysBudgets::propellantBudget pins the return envelope by inverting the rocket equation (returnableBodyMass 542 t with the 15 % policy margin, 651.9 t with none) and captureCommitEnvelope takes the smaller of that and the bag's limit; the mode machine, the sequence and the proximity-operations commit decision refuse a body above it, so the densest body is refused and the large design case is accepted. The analyses and variants hold back the same system margin, so both books now agree on which bodies return. Finding F-F07 (evaluator step-limit on a chained PropellantFor inside a heavy-load configuration) is recorded with its probe. Co-Authored-By: jason.han <hanhuijun@gmail.com> * feat(model): one TugMode vocabulary and one power-by-mode table TethysTugStructure::TugMode is the single mode enumeration (the mode machine's fifteen literals plus earlyOperations) with the named sets thrustingModes, coastingModes, proximityModes and safeModes that every unit's operating and standby modes are built from. TethysModes drops its own enum and TethysOperations its CommandedMode; SetMode and CommandedTug carry TugMode. SubsystemConfiguration.busLoad defaults to TethysBudgets::TugPowerInMode(mode), so the mode table's sixteen rows and the power budget read the same per-unit rollup instead of fifteen unrelated literals. Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(model): propagate the DRO for one full period and pin the period at 13.9155 d droRevolution, DroStabilityAnalysis::revolution and the tooling droRevolutionRk4 stopped at 3.20 time units with a 0.01 step while the orbit's period is 3.20467695, so the recorded closure was the arc still to fly, not a closure error. They now take 320 steps of one 320th of the period and stop at the period; the model's own RungeKutta4 stays in place. TethysEnvironment::destinationDro.period is 13.9155 d, the propagated value, with its derivation in the doc. Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(model): derive the hot-case factor and the tug mass at target from the budgets thermalBudget.hotCaseSolarFactor is the perihelion-over-aphelion solar flux ratio (about 1.13) in place of the bare 1.22; hydrazineBudget reads propellantBudget.tugMassAtTarget in place of launch mass less 700 kg; the flight sequence's xenon load and reserve come from the propellant budget. Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs(model): align doc comments and docs pages with the single transfer book Mission duration 2 200 days (TR-002, mission doc), TS-003 reads the transfer book's thrust allowance, the heliocentric flux range as declared, the return-cruise xenon trend, the TH-001 body mass, the transfer-book case totals, the small-body domain list and the WP-F/WP-G coverage notes now carry the budget's numbers. Co-Authored-By: jason.han <hanhuijun@gmail.com> * feat(model): carry ISQ quantity types on the transfer, capture, power and DRO analyses Δv, thrust, mass flow, c and g₀ and the analysis-tier values of model/70–74 carry their ISQ quantity types (SpeedValue, ForceValue, MassFlowRateValue, AccelerationValue, PowerValue, DurationValue, LengthValue, MassValue, AngularVelocityValue, AngularMomentumValue, TorqueValue, MomentOfInertiaValue, MassDensityValue) in place of suffix-named Reals; the requirement defs the analyses check against take typed parameters, so the Monte Carlo objectives now bind the parameters the defs declare instead of adding new ones. The eight swept or sampled parameters stay Real with a doc comment: the sweep and sample runners write bare numbers to the parameter they draw, which a quantity-typed feature rightly refuses (new finding F-F08 with its probe and pinned run). Tool variables keep the ToolExecution contract; dB stays dimensionless by design. Every value evaluates to the same number as before. Co-Authored-By: jason.han <hanhuijun@gmail.com> * chore(runs): re-record the pinned runs after the design-consistency changes Recorded with the pinned OpenSysML source build (0a5fa2d94). Every transfer, capture, Monte Carlo, trade and dynamics run now reads the single transfer book and target-case set; the DRO run closes over the full period; the dense-target mode and sequence runs replace the large-target mode run; the two F-F08 probe runs drop the wall-time column like the other sweeps. Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs(coverage): re-mark the rows whose evidence the integrated model did not support SE-275 (as-flown values contradict the budgets), SE-156/157 (must rows awaiting the matrix owner's ruling) and the SE-105/128/129 range envelope are marked partial or open with the gap named; SE-152, SE-192, SE-194, SE-195, SE-130 and SE-081 cite the re-recorded runs; SE-123/124/125/134/145 state what the F-B01-fixed build shows (energy, thermal and margin policy close, power while thrusting does not); SE-263/264 and LANG-095/170/532 stay open with the reason. Co-Authored-By: jason.han <hanhuijun@gmail.com> * build(make): gate the mission-tier KerML through the pinned batch oracle in pilot-mission The standalone pilot wrapper refuses .kerml before parsing (F-G01), so pilot-mission now also runs the batch validator over the mission-tier .kerml files against the standard library alone; the .sysml files still go through the standalone wrapper unchanged. Co-Authored-By: jason.han <hanhuijun@gmail.com> * docs(findings): re-adjudicate six rows against the cited KerML and SysML clauses F-D03 (pilot right: checkConnectorTypeFeaturing with deriveUsageMayTimeVary), F-F06 (OpenSysML right: SysML 7.6.3 default multiplicity applies to attribute, item and port usages, not reference usages), F-F04 (under-specified: isDistinguishableFrom lets a Function and an AttributeUsage share a name), F-B03 (pilot right in substance: the two library redefinitions of Occurrence::this collide), F-G01 (closed: tooling, pilot-mission now gates the mission-tier KerML) and F-G03 (OpenSysML right: the pilot's errors are EMF reference-pairing failures, not KerML constraints). Model notes only; the F-xxx ids and probes are unchanged. Co-Authored-By: jason.han <hanhuijun@gmail.com> * runs: pin the OpenSysML commit and Go version only, so runs-check does not depend on how the binary was built Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(requirements): size the despin and contact-speed checks with the largest case's own rotation period TS-019 despinCapacity, TS-014 proximityContactEnvironment and ContactSpeedTest read the largest knowledge-bound case's mass and diameter but divided by the design large case's 252 s period; they now use targetCases.largest.rotationPeriod (100 s). Momentum 222 238 -> 560 040 N m s, hydrazine 34.3 -> 86.5 kg against the 100 kg quarter load, surface speed 0.118 -> 0.298 m/s against 0.35 m/s: every verdict still holds, so no run moves. Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(operations): derive the xenon trend from the propellant book xenonTrend carried its own inventory, rate and days (5 235 kg, 5.2 kg/day, 1 000 days) and projected 35 kg against the 300 kg floor once the inventory followed the transfer book. It now reads TethysBudgets::propellantBudget: aboard = usable less the outbound and rendezvous arcs, rate = the SEP mass flow at aphelion per day, days = the thrusting days the nominal return and insertion arcs need with the missed-thrust allowance (returnArcsXenon). Margin -265 -> +2 058 kg; resourceMarginPositive by xenonTrend flips to holds in the four satisfy runs; house-rules element count +3; object ids shift in the satisfy runs. Co-Authored-By: jason.han <hanhuijun@gmail.com> * fix(operations): spend the missed-thrust allowance on the flown arcs in the xenon trend xenonTrend.current subtracted the nominal outbound and rendezvous xenon while returnArcsXenon carried the allowance, so the projection added the outbound allowance back (about 123 kg). Both terms now use the budget's case; projected equals propellantBudget.usable - xenonNominal (2 235 kg), margin 1 935 kg. No recorded verdict or run moves. Co-Authored-By: jason.han <hanhuijun@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> 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)".
|
HuiJun
marked this pull request as ready for review
October 28, 2026 03:09
Contributor
Author
There was a problem hiding this comment.
Devin Review found 1 potential issue.
1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)
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
#12 (
wp/consistency) merged into its baseintegration/phase-3(cdbdcd8) afterintegration/phase-3itself had already landed on develop (#11,69b2ebb), so develop does not yet carry it. This PR is exactlygit log develop..integration/phase-3: #12's 16 commits plus its merge commit, nothing else — a fast-forward of develop, no conflicts.What it brings to develop (see #12 for the per-item description): the single Δv/thrust-time book (
TethysMission::transferBook), the single target-case table (TethysTarget::targetCases) with the pinned return envelope at capture commit, oneTugModevocabulary withbusLoadread fromTugPowerInMode, the DRO propagated over its full period, ISQ quantity types on the analyses, thepilot-missionKerML oracle, re-adjudicated finding rows, and the review follow-ups (largest.rotationPeriodin TS-019/TS-014/ContactSpeedTest;xenonTrendderived fromTethysBudgets::propellantBudgetwith the missed-thrust allowance applied to the flown arcs, which flipsresourceMarginPositive✗→✓ in four satisfy runs).CI note: develop's
checkworkflow at this point still fetches the OpenSysML nightly intobuild/opensysml/bin/sysmlwhile the Makefile runsbuild/opensysml/sysml, so this PR'scheckfails atmake validatewith exit 127 before any model file is read — the same red as #11/#12 and develop itself. #13 (wp/tool-pin) replaces that withmake toolsat the pin and is green on a tree containing this one whole.Link to Devin session: https://nasa-jpl-demo.devinenterprise.com/sessions/bd8333c05232470c8601104d484dcc58
Open in Devin Desktop: https://nasa-jpl-demo.devinenterprise.com/desktop/session/bd8333c05232470c8601104d484dcc58?variant=devin
Requested by: @HuiJun