fprime-requirements-review
Skill12k starsChanged 20 months agoApache-2.0View on GitHub
Adversarial review of an F Prime requirements set before design or code exists, or when a human asks for one on a PR that changes requirements. Checks each requirement for objective verifiability, clarity, rationale, and the strongest feasible verification method (unit test, then integration/system test, then inspection), and checks the set for breadth of the request and fault/failure coverage. Keywords: F Prime, requirements, review, verifiable, rationale, verification method, fault coverage, shall statement.
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 94
Before reading the rows, list every element of the request — each goal sentence, named command, telemetry item, event, parameter, …
- Distinctive: line 145
Never downgrade because "testing will catch it": what is not a requirement is not verified.
- Very specific: line 148
When the input is a PR, apply pr-diff-scoping: rows the PR adds or edits take the tags above.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Skill: F Prime Requirements Review
A requirement is the contract everything downstream is verified
against (fprime-component-requirements). This skill is the review
side of that contract: it asks of every requirement can it be
objectively verified? and of the set does it cover the request?
It is adversarial — look for the requirement that a wrong component
would still satisfy, and the request element no requirement covers.
Inputs: the requirements table in the fprime-component-requirements
Step 2 form, the request it serves (issue, human goals, parent
requirements), and the SDD if one exists. Review against the request,
never against an implementation. The FPP model of an existing
component may be opened only to enumerate its interfaces for RS-2,
never to decide what a requirement means.
1. Per-requirement checks
RQ-1 — Objectively verifiable
From the row alone the reviewer can write three things: the stimulus or condition, the observable a test or inspector reads (a named event, channel, command response, return value, file state…), and the pass criterion with units and bounds. If any of the three cannot be written, the row fails. "Appropriately", "quickly", "robust", "as needed", "handle", and undefined qualifiers such as "invalid" fail by construction. Two independently testable outcomes are two requirements; one pipeline (read, packetize, send) is one.
Finding-class: req-not-verifiable.
RQ-2 — Easily understood
One sentence, active voice, shall; terms defined in the request,
the SDD, or F Prime documentation; readable by someone who has not
seen the design. No design or implementation content (port kinds,
FPP constructs, data structures, algorithms) — those are design
decisions (fprime-component-requirements Step 3).
Finding-class: req-unclear (reader cannot state the behaviour,
or wording is clear but not crisp) / req-contains-design.
RQ-3 — Rationale
The rationale names an RS-1 request element, a parent REQ-ID, or an RS-2 fault scenario. One that names none — empty, or a restatement of the shall statement — fails. The reviewer never supplies a missing rationale; a requirement nobody can justify is a deletion candidate.
Finding-class: req-no-rationale.
RQ-4 — Verification method, strongest feasible
Each row names a method; the first entry must be the strongest that can observe RQ-1's outcome, further entries may follow:
| Method | Use when |
| Unit test | The outcome is observable at the component boundary alone (ports, commands, events, telemetry, parameters) with a component unit-test harness. |
| Integration test (system test) | The outcome needs more than one component, a deployment, real timing, or real hardware. |
| Inspection | The outcome is not observable at run time (coding constraints, documentation, build-time budgets). Last resort. |
Missing, "TBD", unqualified "Test", or a method that cannot observe the
outcome (unit test for a timing or cross-component behaviour; inspection
for a run-time behaviour) → req-no-verification: the requirement
stands, the method must change. A method that can observe the outcome
when a stronger one in the table also can ("integration test" for an
outcome observable at the component boundary alone) → req-weak-
verification. Inspection of a run-time behaviour is never "weak": it
cannot observe it and is req-no-verification. Absence of a written
test is never a reason to accept a weaker method.
2. Set-level checks
RS-1 — Breadth of the request
Before reading the rows, list every element of the request — each goal sentence, named command, telemetry item, event, parameter, interface, mode, constraint — then map each to the requirement(s) that cover it. An element is covered only when a mapped requirement's observable outcome is the element's outcome (the operator's setpoint change takes effect, not "a setpoint parameter exists"). Naming the element is not coverage. An element with no covering requirement is a gap unless the request explicitly excludes it. Only elements the request states count here; do not infer others.
Finding-class: req-set-gap.
RS-2 — Fault and failure scenarios
For each interface, input, resource and external dependency named in
the request or in any requirement's shall statement, ask what
happens on: invalid or out-of-range input; input or command in a
mode/state that does not accept it; no response or timeout; error
return from a driver or OS call; full queue or buffer; re-entry or
concurrent invocation; unexpected state at startup or after reset;
loss of the dependency. Each scenario has a requirement, or a waiver
line in the set that names either the owner of the scenario — another
component with its REQ-ID, or a framework mechanism with the document
section that specifies it ("owned by Svc::Health, ping timeout,
docs/sdd.md §Ping") — or why it cannot arise, citing the request
constraint or parent requirement that guarantees it ("input is a
compile-time constant per REQ-SYS-012"); a design claim ("the driver
is synchronous") is not a reason before design exists. A waiver that
names neither ("out of scope", "handled elsewhere") is a gap.
Finding-class: req-set-no-fault-coverage.
RS-3 — Consistency
Unique IDs; no two requirements that cannot both be met; no duplicates; one term per thing.
Finding-class: req-set-inconsistent.
3. Tags and scoping
Review-contract tags (_shared/review-contract.md §1), a concrete
rewrite with every finding:
| Class | Tag |
req-not-verifiable, req-no-verification, req-contains-design, req-unclear (reader cannot state the behaviour), req-no-rationale, req-set-gap, req-set-no-fault-coverage, req-set-inconsistent (contradiction, duplicate ID) | **must fix** |
req-weak-verification, req-unclear (clear but not crisp), req-set-inconsistent (duplicate wording, inconsistent terms) | **could fix** |
Never downgrade because "testing will catch it": what is not a requirement is not verified.
When the input is a PR, apply pr-diff-scoping: rows the PR adds or
edits take the tags above; unchanged pre-existing rows that fail take
**future work**. RS-1..3 run over the whole set, but a gap is must
fix only when the PR's request introduces the element or dependency;
otherwise **future work**.
4. Output
review-req-round-N.md. Per-requirement cells read pass or
fail → <key>; RS-1/RS-2 Covered? cells read pass, pass (waived),
or fail → <key>. Keys are stable across rounds:
RQ <class>:<REQ-ID>, RS-1 <class>:"<quoted element>",
RS-2 <class>:<interface>/<scenario>, RS-3 <class>:<REQ-ID>+<REQ-ID>.
## Per-requirement
| ID | RQ-1 | RQ-2 | RQ-3 | RQ-4 |
## Request trace (RS-1)
| Request element (quoted) | REQ-IDs | Covered? |
## Fault scenarios (RS-2)
| Interface / input / resource | Scenario | REQ-ID or waiver | Covered? |
## Consistency (RS-3)
## Findings
| Key | Tag | Class | Row / element | Finding | Rewrite |
## Totals
must fix: N could fix: N open disagreements: N
## Disagreement log
| Round | Key | Author position | Reviewer position | Status |Rounds: re-run RQ-1..4 on changed rows only; re-run RS-1..3 on the
whole set (a deleted or rewritten row can open a gap elsewhere). A
finding closes only when the reviewer verifies the rewritten row
passes the check that raised it; "won't fix" goes to the disagreement
log (the file-based analogue of contract §11). Three rounds by
default; a review rounds: N given at kickoff overrides. Then hand
the log to the human.
Anti-patterns
- Reviewing against the code or FPP instead of the request.
- Rewriting the requirements yourself instead of proposing a rewrite in the finding.
- Accepting "inspection" because no test exists yet — the method describes what can verify it, not what has been written.
- Inferring request elements the request does not state (RS-1); RS-2 enumerates from the requirements as well.
- Reviewing a table you drafted in the same session: the anti-anchoring order of RS-1 needs a reviewer who has not seen the rows.
Trending
More talk lately.about the whole repository
Who's talking about nasa/fprime
- A Hacker News story“The open source flight code that the NASA Mars drone is running”Hacker News · Feb 18, 2021 · 68 points
- github-linguist/linguist“Add FPP (F Prime Prime) language”GitHub · Aug 19, 2026 · 15 reactions
- A Hacker News story“Vue.js is powering NASA flight software”Hacker News · Feb 19, 2021 · 4 points
- nasa/fprime-gds“Add New Darkmode UI Option”GitHub · Sep 21, 2026 · 2 reactions
- nasa/fpp“Deprecate serialize/deserialize in favor of [de]serialize[From/To]”GitHub · Jul 31, 2025 · 2 reactions
The biggest 5 of 58 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 58
Talked about on GitHub, Hacker News and the web (58 times).
On GitHub · 50
- Aug 19, 2026Add FPP (F Prime Prime) language — github-linguist/linguist15 reactions · 4 comments
- Sep 21, 2026Add New Darkmode UI Option — nasa/fprime-gds2 reactions
- Jul 31, 2025Deprecate serialize/deserialize in favor of [de]serialize[From/To] — nasa/fpp2 reactions · 1 comment
- Mar 19, 2026Add ConsoleNoWait — fprime-community/fprime-vxworks1 reaction
- Nov 22, 2025Merge release/v3.1.0a12 into release/v3.1.0 — nasa/fpp1 reaction
45 more on GitHub
- Oct 13, 2025Add ComAggregator for nasa/fprime#4264 — fprime-community/fprime-workshop-led-blinker1 reaction
- Dec 20, 2021FPP Visualization Automation — nasa/fprime-tools1 reaction · 5 comments
- Oct 28, 2026Update for nasa/fprime#6278: define FwTlmPacketizeOffsetType in TlmPacketizerCfg.fpp — fprime-community/fprime-zephyr-reference0 reactions
- Oct 28, 2026Restrict checkTimers and tlmWrite to having a single message on the q… — FireflySpace/fprime0 reactions
- Oct 26, 2026Update for nasa/fprime#6257: TlmPacketizer send states and per-packet overrides — fprime-community/fprime-zephyr-reference0 reactions
- Oct 24, 2026Upgrade to F Prime v4.4.1 — Open-Source-Space-Foundation/proves-core-reference0 reactions
- Oct 23, 2026TlmPacketizer: address lestarch-autobot review must-fix items (nasa/fprime#6144) — FireflySpace/fprime0 reactions
- Oct 16, 2026Include annotation for packets from FPP in dictionary — nasa/fpp0 reactions · 3 comments
- Oct 14, 2026Manual merge from nasa devel #5996 (pktType) — FireflySpace/fprime0 reactions
- Oct 12, 2026Svc/GenericHub: drop message with event and counter on allocation failure instead of asserting — JPL-Devin/fprime0 reactions · 1 comment
- Sep 30, 2026CI: fold workflow_dispatch runner/jobs inputs into the Ref and Framework matrices — JPL-Devin/fprime0 reactions · 1 comment
- Sep 28, 2026Update for nasa/fprime#5996: add pktType to FrameContext — fprime-community/fprime-yamcs-reference0 reactions
- Sep 28, 2026Resolve cookiecutter paths relative to repository — nasa/fprime-tools0 reactions
- Sep 24, 2026Update to latest fprime version — fprime-community/fprime-vorago-reference0 reactions
- Sep 23, 2026Bump fprime_app for nasa/fprime#5996 — fprime-community/fprime_cfs_reference0 reactions
- Sep 23, 2026Update for nasa/fprime#5996 — fprime-community/fprime-yamcs-reference0 reactions
- Sep 22, 2026docs: import LED Blinker timeliness.md into website build — JPL-Devin/fprime0 reactions · 1 comment
- Sep 17, 2026Check C++ formatting — fprime-community/fprime-baremetal0 reactions
- Sep 17, 2026Svc.ComAggregator: consolidate idle filling and configuration — JPL-Devin/fprime0 reactions · 2 comments
- Sep 14, 2026WasmSequencer: give the I32 host resume its own pause-check choice — JPL-Devin/fprime0 reactions · 1 comment
- Sep 11, 2026Fw/Types: serialize bool via U8 path and static-assert pointer size — JPL-Devin/fprime0 reactions · 1 comment
- Sep 1, 2026Rename LinuxUartDriver to PosixUartDriver with deprecated compatibility layer — JPL-Devin/fprime0 reactions · 2 comments
- Aug 22, 2026Feature: DFA-based structural health monitor app for telemetry channels — nasa/cFS0 reactions · 9 comments
- Jul 17, 2026Add TypeDemo component — fprime-community/fprime-yamcs-reference0 reactions
- Jun 22, 2026Add README.md and How-To guide for developing cFS F Prime applications — JPL-Devin/fprime_cfs_reference0 reactions · 2 comments
- Jun 21, 2026Fix DpCatalog UT seed failures (#5104) — JPL-Devin/fprime0 reactions · 4 comments
- Jun 16, 2026Use pr-xxxx pattern for GDS across Integration Test CI — JPL-Devin/fprime0 reactions · 3 comments
- May 29, 2026[#5159] ROSES - Student Review of Rule-Based Testing — lestarch-autobot/fprimesays it tested it0 reactions
- May 29, 2026[#5115] ROSES - Document how to decide between Active/Passive/Queued component - Student Review — lestarch-autobot/fprime0 reactions
- May 29, 2026[#5111] CCSDS Improvements — lestarch-autobot/fprime0 reactions
- May 29, 2026[#5099] DpCatalog Discards Status When Handling StateFile Database — lestarch-autobot/fprime0 reactions
- May 29, 2026[#5051] Add CI run exercising non-default FwType config values — lestarch-autobot/fprime0 reactions
- May 29, 2026[#5018] Replace hand-coded buffer and string classes with instantiated templates — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4846] Add `fprime-util new --config-module` — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4841] DpWriter always deallocates buffers to the same BufferManager — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4806] Change fprime-gds serializable array type representation — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4792] Consolidate Parameters ground scripts — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4745] Update Core components to use FPP constants for string arguments — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4711] fprime_test_api: Sometimes fprime_test_api does not connect to currently running fprime-gds session — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4697] ROSES - Student Review of ISR pattern — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4535] Configurable CPU Affinity for Subtopologies — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4508] ROSES - Student review - Memory management — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4454] VxWorks CI To Build All — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4425] PrmDb filename in subtopology should be configurable — lestarch-autobot/fprime0 reactions
- May 29, 2026[#4324] Switch `FW_PACKET_COMMAND` enumerated value to non-zero value — lestarch-autobot/fprime0 reactions
On Hacker News · 6
- Feb 18, 2021The open source flight code that the NASA Mars drone is running68 points · 3 comments
- Feb 19, 2021Vue.js is powering NASA flight software4 points
- Jan 31, 2024NASA/fprime: F´ – A flight software and embedded systems framework2 points
- Jan 26, 2024F Prime – Flight software framework by NASA2 points
- Jan 21, 2024F': Ingenuity's Open-Source Flight Software Framework2 points
1 more on Hacker News
- Feb 1, 2024Fprime – A flight software and embedded systems framework by NASA1 point
On the web · 2
- Jan 6, 2026F´ Roadmap · nasa/fprime Wiki — google.com
- Dec 3, 2025STM32 Baremetal Reference Project #4497 - nasa/fprime — google.com
In this repository32 other files it gives its agents.
- AGENTS.mdAGENTS.md
- cmake/AGENTS.mdAGENTS.md
- docs/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
- agent-skill-authoringSkill
- ai-session-reportSkill
- ai-session-summarySkill
- ci-test-runtime-policySkill
- fprime-cmake-build-systemSkill
- fprime-component-design-fppSkill
- fprime-component-developmentSkill
- fprime-component-implementationSkill
- fprime-component-integration-testSkill
- fprime-component-requirementsSkill
- fprime-component-unit-testSkill
- fprime-cpp-designSkill
- fprime-ground-input-tracingSkill
- fprime-hardware-input-tracingSkill
- fprime-issue-risk-evaluationSkill
- fprime-iterative-developmentSkill
- fprime-maintenanceSkill
- fprime-topology-developmentSkill
- fprime-unit-testingSkill
- jpl-design-principlesSkill
- maintainer-lookupSkill
- post-inline-reviewSkill
- pr-diff-scopingSkill
- prompt-injection-precheckSkill
- re-review-stateSkill
- triage-classifierSkill
- write-system-functional-docSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

