blob: e1d2739600f40cbb3869737f91a44db02b6e70a9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
namespace SomhairlesDream.Modeling
open SomhairlesDream.Shared
[<CLIMutable>]
type DesignStep =
{ StepId: string
Index: int
ObjectIds: string array
Changes: ArtifactChange array }
module Design =
let steps : DesignStep array =
[| { StepId = "01-foundation"; Index = 0
ObjectIds = [| "heritage.foundation"; "heritage.deck" |]
Changes =
[| { ObjectId = "heritage.foundation"; Kind = "add"; Summary = "Add foundation slab" }
{ ObjectId = "heritage.deck"; Kind = "add"; Summary = "Add raised deck" } |] }
{ StepId = "02-frame"; Index = 1
ObjectIds =
[| "heritage.foundation"; "heritage.deck"; "heritage.frame.left"; "heritage.frame.right"; "heritage.spine" |]
Changes =
[| { ObjectId = "heritage.frame.left"; Kind = "add"; Summary = "Add primary left frame" }
{ ObjectId = "heritage.frame.right"; Kind = "add"; Summary = "Add primary right frame" }
{ ObjectId = "heritage.spine"; Kind = "add"; Summary = "Add central spine" } |] }
{ StepId = "03-cabin"; Index = 2
ObjectIds =
[| "heritage.foundation"; "heritage.deck"; "heritage.frame.left"; "heritage.frame.right"; "heritage.spine"; "heritage.cabin"; "heritage.crossbeam" |]
Changes =
[| { ObjectId = "heritage.cabin"; Kind = "add"; Summary = "Add cabin volume" }
{ ObjectId = "heritage.crossbeam"; Kind = "add"; Summary = "Add cabin crossbeam" } |] } |]
// YJ-01 Voyager-class current-tech probe (source: interstellar-dual-track/current-tech-probe
// scripts/build_probe.py, line ranges cited per step). Object ids map the legacy
// UPPER_SNAKE names onto lowercase dotted ids via documented rule
// (probe.bus.bay.panel.00 <- BUS_BAY_PANEL_00, probe.rtg.01.fin.00 <- RTG_01_FIN_0).
// Display plinth, information card and MODEL_LABEL are intentionally excluded.
let probeSteps : DesignStep array =
let bus =
[| "probe.bus.electronics.decagon"; "probe.bus.ring.front"; "probe.bus.ring.rear"
"probe.bus.bay.panel.00"; "probe.bus.bay.panel.01"; "probe.bus.bay.panel.02"
"probe.bus.bay.panel.03"; "probe.bus.bay.panel.04"; "probe.bus.bay.panel.05"
"probe.bus.bay.panel.06"; "probe.bus.bay.panel.07"; "probe.bus.bay.panel.08"
"probe.bus.bay.panel.09"
"probe.bus.mli.top"; "probe.bus.mli.bottom"
"probe.bus.radiator.port"; "probe.bus.radiator.starboard"
"probe.aacs"
"probe.thruster.01"; "probe.thruster.02"; "probe.thruster.03"; "probe.thruster.04" |]
let booms =
[| "probe.rtg.boom"
"probe.mag.boom"; "probe.mag.head"; "probe.mag.sensor.a"; "probe.mag.sensor.b"
"probe.pws.antenna.left"; "probe.pws.antenna.right"
"probe.pws.tip.left"; "probe.pws.tip.right" |]
let rtgs =
[| "probe.rtg.01"; "probe.rtg.01.fin.00"; "probe.rtg.01.fin.01"; "probe.rtg.01.fin.02"
"probe.rtg.02"; "probe.rtg.02.fin.00"; "probe.rtg.02.fin.01"; "probe.rtg.02.fin.02"
"probe.rtg.03"; "probe.rtg.03.fin.00"; "probe.rtg.03.fin.01"; "probe.rtg.03.fin.02" |]
let hga =
[| "probe.hga.reflector"; "probe.hga.feed"
"probe.hga.strut.00"; "probe.hga.strut.01"; "probe.hga.strut.02"; "probe.hga.strut.03" |]
let instruments =
[| "probe.scan.pivot"; "probe.scan.platform"
"probe.crs"; "probe.plasma"; "probe.optical"; "probe.optical.aperture" |]
let mast = [| "probe.science.boom" |]
let prior (prefix: string array) (current: string array) =
Array.append prefix current
let busChanges = bus |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add ten-sided bus with bay panels, MLI and radiators" })
let boomChanges = booms |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add fields-and-particles and RTG support booms" })
let rtgChanges = rtgs |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add three RTGs with heat-rejection fins" })
let hgaChanges = hga |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add high-gain antenna, feed and struts" })
let instrumentChanges = instruments |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add articulated scan platform with science instruments" })
let mastChanges = mast |> Array.map (fun id -> { ObjectId = id; Kind = "add"; Summary = "Add deployable science mast" })
let liveryChanges =
[| { ObjectId = "probe.hga.reflector"; Kind = "update"; Summary = "Livery pass: reflector white finish" }
{ ObjectId = "probe.bus.mli.top"; Kind = "update"; Summary = "Livery pass: MLI gold foil finish" }
{ ObjectId = "probe.bus.bay.panel.01"; Kind = "update"; Summary = "Livery pass: restrained red accents on bay panels" }
{ ObjectId = "probe.pws.tip.left"; Kind = "update"; Summary = "Livery pass: red antenna tip markers" }
{ ObjectId = "probe.bus.electronics.decagon"; Kind = "update"; Summary = "Livery pass: body blue basecoat" }
{ ObjectId = "probe.rtg.01"; Kind = "update"; Summary = "Livery pass: graphite RTG housings" } |]
[| { StepId = "probe-01-bus"; Index = 0; ObjectIds = bus; Changes = busChanges }
{ StepId = "probe-02-boom"; Index = 1; ObjectIds = prior bus booms; Changes = boomChanges }
{ StepId = "probe-03-rtg"; Index = 2; ObjectIds = prior (prior bus booms) rtgs; Changes = rtgChanges }
{ StepId = "probe-04-hga"; Index = 3; ObjectIds = prior (prior (prior bus booms) rtgs) hga; Changes = hgaChanges }
{ StepId = "probe-05-instruments"; Index = 4
ObjectIds = prior (prior (prior (prior bus booms) rtgs) hga) instruments; Changes = instrumentChanges }
{ StepId = "probe-06-mast"; Index = 5
ObjectIds = prior (prior (prior (prior (prior bus booms) rtgs) hga) instruments) mast
Changes = mastChanges }
{ StepId = "probe-07-livery"; Index = 6
ObjectIds = prior (prior (prior (prior (prior (prior bus booms) rtgs) hga) instruments) mast) [||]
Changes = liveryChanges } |]
// HNX-01 crewed interstellar starship (Concept A "Keel"): fusion-torch
// study with a spin-gravity habitat torus, water-shadow radiation
// shield and an axial keel separating crew from the reactor section.
// Display-scale visual research; no mass/thrust/shielding closure is
// claimed — the ship.py module header lists the deliberately open
// engineering problems.
let shipSteps : DesignStep array =
let keel =
[| "starship.keel.spine"; "starship.nose.cone"; "starship.dock.ring" |]
let hab =
[| "starship.hab.torus"; "starship.hub.core"
"starship.spoke.00"; "starship.spoke.01"; "starship.spoke.02"
"starship.spoke.03"; "starship.spoke.04"; "starship.spoke.05" |]
let radiation =
[| "starship.shadow.collar"; "starship.storm.cellar" |]
let reactor =
[| "starship.core.pressure"; "starship.core.shield.plug"
"starship.nozzle.magnetic"
"starship.radiator.00"; "starship.radiator.01"; "starship.radiator.02"
"starship.radiator.03"; "starship.radiator.04"; "starship.radiator.05" |]
let power =
[| "starship.power.truss"; "starship.capacitor.ring"
"starship.comm.dish"; "starship.comm.feed" |]
let cabin =
[| "starship.window.00"; "starship.window.01"; "starship.window.02"
"starship.window.03"
"starship.airlock.ring"; "starship.airlock.tunnel"
"starship.cargo.pod.00"; "starship.cargo.pod.01" |]
let prior (prefix: string array) (current: string array) =
Array.append prefix current
let keelChanges =
[| { ObjectId = "starship.keel.spine"; Kind = "add"; Summary = "Add axial keel spine from bow to nozzle bay" }
{ ObjectId = "starship.nose.cone"; Kind = "add"; Summary = "Add forward nose cone" }
{ ObjectId = "starship.dock.ring"; Kind = "add"; Summary = "Add forward docking ring" } |]
let habChanges =
Array.append
[| { ObjectId = "starship.hab.torus"; Kind = "add"; Summary = "Add rotating spin-gravity habitat torus" }
{ ObjectId = "starship.hub.core"; Kind = "add"; Summary = "Add zero-g hub with bearing core" } |]
(Array.init 6 (fun index ->
{ ObjectId = sprintf "starship.spoke.%02d" index; Kind = "add"; Summary = "Add pressurized transfer spoke" }))
let radiationChanges =
[| { ObjectId = "starship.shadow.collar"; Kind = "add"; Summary = "Add water-shadow radiation collar" }
{ ObjectId = "starship.storm.cellar"; Kind = "add"; Summary = "Add storm cellar shelter volume" } |]
let reactorChanges =
Array.append
[| { ObjectId = "starship.core.pressure"; Kind = "add"; Summary = "Add fusion core pressure vessel" }
{ ObjectId = "starship.core.shield.plug"; Kind = "add"; Summary = "Add reactor shield plug" }
{ ObjectId = "starship.nozzle.magnetic"; Kind = "add"; Summary = "Add magnetic exhaust nozzle" } |]
(Array.init 6 (fun index ->
{ ObjectId = sprintf "starship.radiator.%02d" index; Kind = "add"; Summary = "Add waste-heat radiator panel" }))
let powerChanges =
[| { ObjectId = "starship.power.truss"; Kind = "add"; Summary = "Add power conditioning truss" }
{ ObjectId = "starship.capacitor.ring"; Kind = "add"; Summary = "Add pulsed-power capacitor hoop" }
{ ObjectId = "starship.comm.dish"; Kind = "add"; Summary = "Add high-gain communication dish" }
{ ObjectId = "starship.comm.feed"; Kind = "add"; Summary = "Add communication feed horn" } |]
let cabinChanges =
Array.append
(Array.init 4 (fun index ->
{ ObjectId = sprintf "starship.window.%02d" index; Kind = "add"; Summary = "Add habitat observation window" }))
[| { ObjectId = "starship.airlock.ring"; Kind = "add"; Summary = "Add forward airlock ring" }
{ ObjectId = "starship.airlock.tunnel"; Kind = "add"; Summary = "Add pressurized airlock tunnel" }
{ ObjectId = "starship.cargo.pod.00"; Kind = "add"; Summary = "Add port cargo pod" }
{ ObjectId = "starship.cargo.pod.01"; Kind = "add"; Summary = "Add starboard cargo pod" } |]
let liveryChanges =
[| { ObjectId = "starship.keel.spine"; Kind = "update"; Summary = "Livery pass: bone-white hull structure" }
{ ObjectId = "starship.hab.torus"; Kind = "update"; Summary = "Livery pass: habitat ring bone finish" }
{ ObjectId = "starship.shadow.collar"; Kind = "update"; Summary = "Livery pass: ceramic shield darkening" }
{ ObjectId = "starship.storm.cellar"; Kind = "update"; Summary = "Livery pass: ceramic cellar finish" }
{ ObjectId = "starship.dock.ring"; Kind = "update"; Summary = "Livery pass: amber accent on dock ring" }
{ ObjectId = "starship.capacitor.ring"; Kind = "update"; Summary = "Livery pass: amber capacitor hoop" }
{ ObjectId = "starship.window.00"; Kind = "update"; Summary = "Livery pass: glass glazing" }
{ ObjectId = "starship.nozzle.magnetic"; Kind = "update"; Summary = "Livery pass: nozzle coil graphite" } |]
[| { StepId = "ship-01-keel"; Index = 0; ObjectIds = keel; Changes = keelChanges }
{ StepId = "ship-02-hab"; Index = 1; ObjectIds = Array.append keel hab; Changes = habChanges }
{ StepId = "ship-03-radiation"; Index = 2; ObjectIds = Array.append (Array.append keel hab) radiation; Changes = radiationChanges }
{ StepId = "ship-04-reactor"; Index = 3; ObjectIds = Array.append (Array.append (Array.append keel hab) radiation) reactor; Changes = reactorChanges }
{ StepId = "ship-05-power"; Index = 4; ObjectIds = Array.append (Array.append (Array.append (Array.append keel hab) radiation) reactor) power; Changes = powerChanges }
{ StepId = "ship-06-cabin"; Index = 5; ObjectIds = Array.append (Array.append (Array.append (Array.append (Array.append keel hab) radiation) reactor) power) cabin; Changes = cabinChanges }
{ StepId = "ship-07-livery"; Index = 6; ObjectIds = Array.append (Array.append (Array.append (Array.append (Array.append (Array.append keel hab) radiation) reactor) power) cabin) [||]; Changes = liveryChanges } |]
let forProject (projectId: string) : DesignStep array =
if projectId.StartsWith("probe-") then probeSteps
elif projectId.StartsWith("ship-") then shipSteps
else steps
|