Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
35 changes: 26 additions & 9 deletions src/pages/concepts/qualification.astro
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,9 @@ const crumbs = [
<tr>
<td>Bench</td>
<td>
300 runs per host with injected faults on three general-purpose processors. Not radiation testing, not
target hardware. See <a href="/core/bench/">Bench</a>.
300 runs per host with injected faults on three general-purpose processors, and a known-answer test
coverage campaign on the last replica. Not radiation testing, not target hardware. See{' '}
<a href="/core/bench/">Bench</a>.
</td>
<td>NPR 7150.2, ECSS-E-ST-40C</td>
</tr>
Expand All @@ -125,6 +126,18 @@ const crumbs = [
</td>
<td>NPR 7150.2, ECSS-E-ST-40C</td>
</tr>
<tr>
<td>F&#180; requirements and design notes</td>
<td>
Drafts in the flight repo: numbered requirements with a verification method each, and the design notes.
Not baselined or reviewed by a program. See{' '}
<a href="https://github.com/mruspace/flight/blob/v0.3.1/docs/fprime-requirements.md">
fprime-requirements.md
</a>
.
</td>
<td>NPR 7150.2, ECSS-E-ST-40C</td>
</tr>
</tbody>
</table>
</div>
Expand All @@ -140,6 +153,16 @@ const crumbs = [
</tr>
</thead>
<tbody>
<tr>
<td>Hardware-in-the-loop testing on target-class processors</td>
<td class="m">Not started</td>
<td>NPR 7150.2, ECSS-E-ST-40C</td>
</tr>
<tr>
<td>Radiation testing</td>
<td class="m">Not started</td>
<td>Hardware topic, outside the four software standards above</td>
</tr>
<tr>
<td>Software classification and criticality</td>
<td class="m">Not started</td>
Expand All @@ -160,12 +183,6 @@ const crumbs = [
<td class="m">Not started</td>
<td>NPR 7150.2, ECSS-Q-ST-80C</td>
</tr>
<tr>
<td>Rust toolchain qualification plan: TODO</td>
<td class="m">Not started</td>
<td>NPR 7150.2, ECSS-Q-ST-80C</td>
</tr>
<!-- TODO: Rust toolchain qualification plan. Write it, then update this row. -->
<tr>
<td>Coding standard compliance</td>
<td class="m">Not started</td>
Expand All @@ -185,7 +202,7 @@ const crumbs = [
</table>
</div>
<p class="tiny">
Status as of 11 Oct 2026, flight v0.2.0. The F&#180; components and the C interface have numbered requirements,
Status as of 17 Oct 2026, flight v0.3.1. The F&#180; components and the C interface have numbered requirements,
each with a verification method, but no trace to mission or standard requirements.
</p>

Expand Down
2 changes: 1 addition & 1 deletion src/pages/concepts/shrinking-quorum.astro
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const crumbs = [
{ label: 'Concepts', href: '/concepts/shrinking-quorum/' },
{ label: 'Shrinking quorum' },
];
const proofs = 'https://github.com/mruspace/flight/blob/v0.2.0/quorum/src/lib.rs';
const proofs = 'https://github.com/mruspace/flight/blob/v0.3.1/quorum/src/lib.rs';
---

<DocsLayout
Expand Down
30 changes: 17 additions & 13 deletions src/pages/core/quorum-cli.astro
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ const crumbs = [
<td class="m">corrupt</td>
<td>
One bit flips in the replica&#39;s working memory during its next computation. (In v0.2.0, a corrupt fault
on an odd tick in self-check mode was lost. Fixed after v0.2.0.)
on an odd tick in self-check mode was lost. Fixed in v0.3.0.)
</td>
</tr>
<tr>
Expand All @@ -131,7 +131,7 @@ const crumbs = [
<code>stuckbit:I@T/LOC.BIT.V</code>: from tick T, bit BIT of LOC is forced to V (0 or 1), in both
self-check runs and in the known-answer test. LOC is <code>in</code> (the input, bits 0 to 63),{' '}
<code>block</code> (the 4 KiB working block, bits 0 to 32767), <code>acc</code> (the hash accumulator, 0
to 63) or <code>out</code> (the result, 0 to 63). Added after v0.2.0. See{' '}
to 63) or <code>out</code> (the result, 0 to 63). Added in v0.3.0. See{' '}
<a href="/core/bench/#kat">known-answer test coverage</a>.
</td>
</tr>
Expand Down Expand Up @@ -209,15 +209,15 @@ const crumbs = [
prints:
</p>
<pre class="pre" tabindex="0">policy=shrink ticks=20000 seed=1 upset_rate=0.001
<span class="s">useful=14989</span> detected=11 wrong=0 halted_at=never alive_at_end=1 stopped=completed last_useful=20000
footprint: voter_max_rss=1920KiB replica_max_rss=1808KiB cpu=0.48s wall=0.46s
<span class="s">useful=14989</span> detected=11 wrong=0 halted_at=never alive_at_end=1 stopped=completed last_useful=20000 kat_tests=174
footprint: voter_max_rss=1936KiB replica_max_rss=1824KiB cpu=0.429s wall=0.420s
limits: memory=128MB/process cpu_time=none cpu_share=none max_run=none reply_timeout=2000ms</pre>
<p class="tiny" style="margin-top: 10px">
flight v0.2.0 on an Apple M4. The footprint line varies by host.
flight v0.3.1 on an Apple M4. The footprint line varies by host.
</p>
<p style="margin-top: 16px">
<code>last_useful</code> is the tick of the last correct result. With a scheduled stuck, hang or corrupt fault,
the output adds a <code>detection:</code> line (also for <code>stuckbit</code>, after v0.2.0): the faults
the output adds a <code>detection:</code> line (also for <code>stuckbit</code>, since v0.3.0): the faults
injected, how many the voter caught, and the mean and longest ticks from fault to first reaction. The{' '}
<a href="/core/bench/">bench</a> runs this program over a matrix of faults.
</p>
Expand All @@ -242,13 +242,17 @@ limits: memory=128MB/process cpu_time=none cpu_share=none max_run=none reply_tim

<h2 id="opssat">On OPS-SAT</h2>
<p>
For the experiment registered with ESA&#39;s OPS-SAT Space Lab for OPS-SAT PRETTY (exp4051, October 2026). Nothing
has run on the satellite yet. <code>opssat/run</code> is the entry point the OPS-SAT runner executes: the
shrinking quorum and fixed TMR one after the other, same seed and fault schedule, all output in a folder for
downlink, finished inside a five-minute window. <code>opssat/package.sh</code> builds the package from a
checksum-verified release binary. <code>opssat/run.sh</code> starts, checks and stops a long run on any Linux
system. Tagged releases ship each static Linux binary (three ARM, one x86_64) with both launchers, the fault
schedules and the operations note.
For the experiment registered with ESA&#39;s OPS-SAT Space Lab for OPS-SAT PRETTY (exp4051, October 2026). ESA ran
the v0.3.1 package in its software environment on 15 October 2026, and TU Graz ran it on the PRETTY FlatSat, the
flight processor on the bench, on 16 October 2026. Both runs exited 0, every fault landed on its scheduled tick,
and no result was wrong. On the flight processor at the 5% CPU share the voter made about 45 ticks per second (
<a href="https://github.com/mruspace/flight/blob/main/docs/opssat.md">operations note</a>, with the measured
results). Nothing has run on the satellite yet; the run in orbit is next. <code>opssat/run</code> is the entry
point the OPS-SAT runner executes: the shrinking quorum and fixed TMR one after the other, same seed and fault
schedule, all output in a folder for downlink, finished inside a five-minute window.{' '}
<code>opssat/package.sh</code> builds the package from a checksum-verified release binary.{' '}
<code>opssat/run.sh</code> starts, checks and stops a long run on any Linux system. Tagged releases ship each
static Linux binary (three ARM, one x86_64) with both launchers, the fault schedules and the operations note.
</p>
<DocsEnd />
</article>
Expand Down
4 changes: 2 additions & 2 deletions src/pages/core/quorum-crate.astro
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ quorum = {'{'} git = <span class="s">"https://github.com/mruspace/flight"</span>
{'}'}
{'}'}</pre>
<p style="margin-top: 16px">
Its output, from <code>cargo run</code> against v0.2.0:
Its output, from <code>cargo run</code> against v0.3.1:
</p>
<pre class="pre" tabindex="0">[Single(7), Single(7), Single(9)]: command 7
[Absent, Single(7), Single(7)]: command 7
Expand Down Expand Up @@ -370,7 +370,7 @@ quorum = {'{'} git = <span class="s">"https://github.com/mruspace/flight"</span>
</tbody>
</table>
</div>
<p class="tiny">Each proof name links to its source at v0.2.0.</p>
<p class="tiny">Each proof name links to its source at v0.3.1.</p>
<h3 id="not-covered">Not covered</h3>
<ul class="sig-list">
<li>
Expand Down
9 changes: 5 additions & 4 deletions src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ import DocsLayout from '../layouts/DocsLayout.astro';
<h3 class="h3">F&#180; and OPS-SAT</h3>
<p class="small soft" style="margin: 10px 0 0">
F&#180; components around the Rust core, a C interface for other frameworks, and the operations note and
package for the registered OPS-SAT PRETTY experiment.
package for the OPS-SAT PRETTY experiment (exp4051): software environment and FlatSat tests passed, the run in
orbit next.
</p>
</a>
<a class="card" href="/lab/2049/" style="text-decoration: none">
Expand All @@ -66,12 +67,12 @@ cargo run --release --bin quorum -- --policy shrink --ticks 20000 --seed 1 \
Run the same seed with <code>--policy tmr</code> to compare. The first two lines of each run:
</p>
<pre class="pre" tabindex="0">policy=shrink ticks=20000 seed=1 upset_rate=0.001
<span class="s">useful=14989</span> detected=11 wrong=0 halted_at=never alive_at_end=1 stopped=completed last_useful=20000
<span class="s">useful=14989</span> detected=11 wrong=0 halted_at=never alive_at_end=1 stopped=completed last_useful=20000 kat_tests=174

policy=tmr ticks=20000 seed=1 upset_rate=0.001
useful=9990 detected=9 wrong=0 <span class="s">halted_at=10000</span> alive_at_end=1 stopped=halted last_useful=9999</pre>
useful=9990 detected=9 wrong=0 <span class="s">halted_at=10000</span> alive_at_end=1 stopped=halted last_useful=9999 kat_tests=0</pre>
<p class="tiny" style="margin-top: 10px">
flight v0.2.0 on an Apple M4. The counts depend only on the seed.
flight v0.3.1 on an Apple M4. The counts depend only on the seed.
</p>
<p style="margin-top: 16px">
Fixed TMR halts at tick 10000, when the second replica dies. The shrinking quorum keeps running on the last
Expand Down