rulecard_firing: the engine matched a rule card against the signal layer, and only then can a scout or an agronomist act on it. If the satellite cannot see it, the platform cannot record it.
That gap bites hardest where the instrument is weakest. Panel dryness on rubber shows as a slow, block-wide NDVI decline over one to three years. Phosphorus and potassium status are indirect only; ion species cannot be separated by multispectral. The literature documents these hazards in full and the product cannot record a conclusion about any of them.
The UI has said Findings since Pass 2, and the design system’s FindingCard renders both machine and human sources the same way. The general word was in use before the general entity existed. Amendment C promotes finding to the general entity, adds a required provenance discriminator, and specifies what the rest of the model does with the human-raised case.
Amendment C is an ontology change. It touches Layer 1 (entity shape), Layer 2 (lifecycle and expiry as a modelling event), Layer 3 (guardrails and safety floor), and Layer 4 (seed). The band model retrofit cost roughly 15 phases because Layer 1 shipped without
crop, ecosystem, and stage. Provenance is the same shape and is best resolved before the human-findings surface ships.Shape: one entity with a provenance discriminator
Decision. A finding is one entity (finding) with a required provenance discriminator, not two entities behind a shared interface.
Argument.
A rulecard_firing and a human observation share more than they differ on. Both are:
- Bound to a
fieldand acrop_cycle. - Placed in phenology (
stage_windowfor machine;observed_atphenology-resolved for human). - Consumed by Activity & Alerts, Field Scouting, and Verification through the same event contract.
- Rolled up by the Aggregation Model as hazard counts.
drivers, no severity formula, no yield_impact layers, and no mitigation.window_days_by_severity. It has an author, a rationale, and hand-attached evidence.
Two entities force every downstream consumer (the risk feed, scout task creation, verification bundle assembly, the advisor’s retrieval layer) to branch on type. One entity with nullable machine fields lets every consumer read provenance and treat the null case honestly, which matches the product’s habit of showing an em dash rather than fabricating a comparable figure.
Cost of the choice. Every rulecard_firing field the current schema treats as required (rulecard_id, drivers, severity_formula_output, yield_impact_resolved) becomes conditional on provenance = machine. Consumers must respect the null case. This is the same discipline the Aggregation Model already applies (“Never average an average”) and the same discipline the Verification Model already applies to weak cross-checks.
Vocabulary
Use this table when reading any other page in the amendment or in the downstream modules. These terms are strict; do not use them interchangeably.Fields
The finding record. Machine-only fields are conditional onprovenance = machine; human-only fields are conditional on provenance = human. Fields without a doc source are decided here and marked.
Lifecycle
rulecard_firing today runs dormant → active → frozen → resolved | dismissed. See the activity_bindings effect vocabulary in Risk Model for how transitions are triggered.
A human finding is never dormant. Nothing fires it; someone writes it. The moment it exists, it is already asserted.
State applicability
expired and closed_with_cycle are the two new states Amendment C adds. Every other state is reused. The consumer contract (Activity & Alerts, Verification, Aggregation) already treats these states as opaque enum values, so the additions are additive.An earlier draft of Amendment C introduced a third state, pending_review, that gated critical human claims until a peer signed. That mechanism has been withdrawn before ship in favour of the acknowledgement model in Severity and the safety floor. Because Amendment C has not shipped, there is no migration: the state never existed in a running schema.Who acts
Cycle close
When the parentseason closes per Crop Cycle Models, every finding on that cycle that is still in an open state (active, frozen) transitions to closed_with_cycle. The transition is terminal: the finding does not fire, does not deliver notifications, and does not accept further state changes. It stays in the record for the season’s history, per the Verification audit trail and per the Aggregation Model rollup requirement to reproduce the season’s rollups later.
closed_with_cycle is distinct from resolved: a resolved finding was acted on. A cycle-closed finding was not, and the record should not claim otherwise.
Expiry
An unactioned finding is a modelling event, not housekeeping. The window scales with severity; expiry is disclosed on every surface that shows the finding; and expiry is audited so the Aggregation Model reproducibility requirement holds. When the clock starts. The expiry clock starts when a finding entersactive, which for human findings is the moment of raise. A human finding is a live signal from creation, so there is no earlier state to protect it from expiring. Acknowledgement is recorded against an already-active finding and does not gate, pause, or restart the expiry clock; the unacknowledged case is governed by the Guardrails → Escalation timer, which runs in parallel.
Windows by effective severity.
Disclosure. Every surface that shows an expired finding must state that it expired, when, and why (“Expired unactioned on 12 Jul · window: 72 hours at high severity”). Expiry is a visible event on the Activity & Alerts feed, on the field’s finding list, and in any Verification bundle that includes the finding.
What expiry does not do in Amendment C. Expiry does not modify the yield estimate. Whether an expired unactioned finding should count against the season’s yield model is a Layer 2 question that belongs in a companion amendment; see Open Questions. Amendment C lands the state, the windows, and the disclosure rule; a subsequent amendment can wire expiry into
yield_impact.resolved once the weight function, composition rule, and machine parallel (task.overdue on machine findings) are decided.
Severity and the safety floor
This is the sharpest question in the amendment. A platform where any user can manufacture an unsuppressible alert has a problem. A platform where a trained agronomist standing in the field cannot mark what they have seen as urgent has a worse one. Amendment C resolves the question in two parts. Who may reach each band is a per-role table (below). Whether a serious claim reaches its audience immediately or waits for a peer to confirm is an organisation-level delivery policy, bounded by the safety floor (see Delivery policy). An earlier draft gatedcritical claims at raise time in a pending_review state; that mechanism has been withdrawn in favour of the model here.
The safety floor as it stands
From Semai Advisor Safety floor:- Severity ≥
highsignals cannot be suppressed, muted beyond the bounded window, or personalized away. - The mute bound is per-severity:
criticalnever,high4 hours,medium7 days,low30 days. - Dismissal of a specific firing is 14 days on the same rulecard + field + cycle, not subject to the mute bound.
severity_effective and does not distinguish provenance. Amendment C keeps that.
Who may reach each band
A human finding may assert the bands its author’s role permits, and entersactive immediately on raise. The safety floor’s mute bounds apply to severity_effective, not to provenance.
The two cells to argue on this page, because they are the ones a future reader will second-guess:
Why
approver and estate_manager reach high and critical directly. An estate manager runs the estate’s day-to-day operations and owns overdue tasks and deviation escalations. Requiring an agronomist to countersign before that role may call a hazard serious inverts the hierarchy the platform is deployed into. approver sits in the same operational lane.
Why scout cannot reach high at all. The distinction the lede draws is between any user and a trained agronomist. A scout’s documented function is ground-truth work: visits, photos, observations. Diagnosis is not in that lane. A capped scout is not silenced: they raise at medium with evidence and an in-scope agronomist promotes in one action per Who may raise, per role.
And why the band matters at high, not at critical. The safety floor engages at high: signals at severity ≥ high cannot be suppressed, muted beyond the bounded window, or personalised away. high is where the platform’s least reversible behaviour switches on, and who may reach it alone is the real question. critical is simply the band above it; every role who may reach high may reach critical, and every role who cannot reach high cannot reach critical either.
Acknowledgement
Acknowledgement is not a gate. It is a property recorded on an already-active finding:
Who may acknowledge: an in-scope
agronomist who is not the author. Fallback: an in-scope estate_manager where no other in-scope agronomist has been active in the preceding 24 hours. The author is barred by the not-author_ref rule and is excluded from the fallback test on the same reasoning: their own activity cannot count as the agronomist activity that blocks the fallback, so a single-agronomist estate always takes the fallback path. The fallback is recorded on acknowledged_by_role and disclosed wherever the acknowledgement is shown; a manager’s acknowledgement is not an agronomist’s and the record must not imply otherwise.
Acknowledgement is safety-critical for high and critical and required by the escalation guardrail below; it is not required for the finding to be live.
Delivery policy
Whether a serious human finding reaches its audience immediately or waits for acknowledgement is organisational, not universal. The platform serves federal agencies, estate groups, cooperatives, and smallholder collectives, and their governance genuinely differs. Delivery policy is a per-organisation setting, set by anestate_admin alongside verification presets and notification defaults.
Two settings. Named for what the administrator is choosing, not in spec vocabulary. Enum values in the schema are immediate and hold_until_acknowledged; user-facing labels are the ones below and are the responsibility of the labels file.
The floor is the bound, and this is the load-bearing sentence: a held finding is an active finding, so the safety floor applies to it in full. The floor’s mute-bound table (
critical never, high 4 hours, medium 7 days, low 30 days) then settles what may be held and for how long:
criticalis never held, under either setting. It delivers immediately, always. Acknowledgement is recorded after the fact and escalates if absent.highmay be held for at most 4 hours, its existing mute bound, and delivers automatically when that elapses whether or not anyone has acknowledged it.
The mode travels with the finding
The delivery policy in force at creation is snapshotted onto the finding asdelivery_policy_at_creation and disclosed wherever the finding crosses an organisational boundary: every Verification bundle, every rollup in the Aggregation Model, and every dashboard in the Effect Methodology that mixes findings from more than one organisation.
Without this, a national dashboard aggregates findings that passed different governance bars and presents them as one number. That is the same class of error as averaging across crops, and the same discipline applies: disclose rather than hide, and never present two differently-constituted quantities as comparable without saying so.
Interaction with dismissal
Dismissal of a human finding follows the same 14-day rule as machine dismissal: 14-day suppression on the samehazard_ref, field_ref, and crop_cycle_ref. A dismissed human finding whose severity_effective is critical still surfaces every re-raise on the same field during the suppression window as a new activity entry; only the notification is suppressed. This mirrors the existing rule in Semai Advisor Safety floor.
Guardrails
This module follows the shared guardrails template. The agent and every non-agent write path must respect these rules. Amendment C does not introduce a ninth category.Who may raise, per role
Roles resolve against Role Model. No new roles are introduced. Theregional row reflects the “read-only for operations, not for observations” rule described below.
Every human finding enters
active on raise, regardless of band or role. Acknowledgement is a property recorded on the finding, not a gate in front of it; who may record it is the “May acknowledge” column above and the rules in Acknowledgement. Whether delivery holds for high findings until acknowledgement lands is the organisation-level Delivery policy, bounded by the safety floor.Scout ceiling is medium. A scout who believes what they are seeing warrants high or critical raises the finding at their ceiling and requests promotion; an in-scope agronomist promotes in one action.Promotion reuses the existing mechanism. It is the promote_severity effect already defined in Risk Model → activity bindings — one band up — not a parallel path invented here. What the human case adds is an actor: every existing use of promote_severity fires from system (for example task.overdue per Field Scouting), so the effect never needed to record who applied it.Promotion writes an append row, never a mutation: promoted_by, promoted_by_role, promoted_at, and severity_before_promotion. author_ref does not change. The scout remains the author of the observation; the agronomist is recorded as the promoter. A promoted finding therefore shows both the band its author asserted and the band the platform now acts on, and the raising table is not circumvented — a scout still cannot assert high, and an agronomist taking a finding to high is on the record by name for having done so.Read-only means read-only for operations, not for observations. The regional role (typically an agency officer per the Role Model) cannot assign scout tasks, approve VRA maps, or export verification bundles. It can raise a human finding at low or medium, because recording what was seen on-site is an observation, not an operation. Raising high or critical is refused for regional; that band is reserved for actors who can also act on it.Downstream behaviour
This is what Layer 2 consumers do when they read afinding and its provenance.
Activity & Alerts
A human finding lands in the Activity & Alerts feed as a row of its own, marked with the provenance chip described in Disclosure. Notification routing followsseverity_effective and the recipient’s Notification Preferences. Delivery timing follows the organisation’s Delivery policy: under immediate, every band delivers on the routing its severity_effective earns; under hold_until_acknowledged, high findings hold until acknowledged or until the 4-hour safety-floor mute bound elapses, whichever comes first, and every other band delivers immediately. critical is never held.
An unacknowledged review queue is a filter on active findings where acknowledged_by is null, not a state the findings live in.
The current alert-vs-notification taxonomy in Activity & Alerts splits the feed by source: alerts come from data, notifications come from humans. A human-raised field-level finding is field-critical like an alert and human-sourced like a notification. It sits between the two categories. See Docs Delta AC-05.
Activity bindings
activity_bindings in Risk Model fire on events, not on entities. A human finding emits events on the same contract:
Duplicate detection
When a human finding is drafted on a field and hazard where an open finding of either provenance already exists, the platform proposes a merge rather than committing a second row silently. The proposal is a Task artifact per the Semai Advisor overview tier-1 knowledge tier: AI-proposed, human-confirmed, RBAC-gated.
The proposal is a soft warning under Guardrails, not a refusal. If the author declines the merge, the second finding commits as a distinct row and both remain visible; the Aggregation Model hazard count carries both. Silent auto-merge is refused: two field observations are never collapsed without an accountable click.
Repeated hazard labels become Proposals
When the samehazard_ref = unclassified label pattern appears on human findings across multiple fields, the advisor files a Proposal artifact into the human review queue per the tier-2 propose-value path in Semai Advisor overview. The proposal names the pattern, the fields and observations that produced it, and the closest existing rule cards. Approval creates a new rule card via the tier-4 schema-change path; rejection dismisses the pattern and records the rejection reason for future retrieval.
This turns the human channel into a route by which the knowledge base learns what it is missing. It does not let a repeated observation become authoritative on its own; the tier-2 review gate remains.
Field Scouting
A human finding may spawn a scout task exactly the way a machine finding does. The task’s AI brief is drawn fromhazard_ref if it points to a literature page; if hazard_ref = unclassified, the brief falls back to Level 2 (“downgrade artifact”) per Failure Modes and the task is drafted with a free-text objective and no rule-card-derived checklist.
The Field Scouting refusal on suppressing a severity ≥ high task must widen from “originates from a severity ≥ high rule card” to “originates from a severity_effective ≥ high finding, whatever its origin”. As currently written, human high findings would be suppressible while machine ones are not; see Docs Delta AC-04.
VRA Maps
A human finding may motivate a VRA map but cannot pre-fill agronomic rates. The map draft opens with the finding attached as evidence and thehazard_ref as the target; rates are authored, not inferred. This preserves the existing Guardrails on prescription rates.
Verification
A human finding is an eligible source event for a Verification bundle. The Verification Model requiresevent_id, event_type, field_id, geometry, occurred_at, logged_at, actor, and payload; a human finding maps directly:
The cross-check strength grade for a human finding is bounded by the corroborating satellite pass. A human finding with no corroborating imagery is submissible at weak grade with the flag surfaced; the Verification Model already handles this case for cloud-blocked passes and applies identically here. This is deliberate: the hazards a human finding is most useful for (panel dryness, ion-species salinity, phosphorus deficiency) are precisely the ones where the satellite is a weak cross-check.
Aggregation
Aggregation Model rollups count findings by category. Amendment C adds one axis: rollups split byprovenance so estate, regional, and national dashboards can show “12 fields at HIGH blast risk (10 machine, 2 human)”. No new metric is invented; the existing hazard-count category simply carries a provenance breakdown. Area-weighted indices and distribution buckets are unaffected because they read the signal layer, not findings.
Feedback into farm_history
farm_history is the top layer of the Risk Model yield-impact resolver and, per Amendment A, the top layer of the band resolver. Letting the wrong human finding calibrate it silently poisons every future band and yield-impact resolution on that farm.
Decision. Corroborated resolved human findings feed farm_history on by default. Uncorroborated resolved findings stay in the record for the season but do not calibrate. Estate admins can widen the default to “all resolved” via one estate-level switch; the amendment does not enable that widening for any estate automatically.
The rule rests on three guards, all of which must be in place before farm_history feedback ships:
- Dismissed, expired, and
closed_with_cyclefindings never calibrate. Onlyresolvedfindings withcorroboration_refset contribute under the default. The switch to “all resolved” removes the corroboration requirement but not the other terminal states. - A finding contradicted by a later check is excluded retroactively. The
raise_contradictionmechanism already exists for machine findings; Amendment C extends it so a subsequentscout.completedormap.appliedthat contradicts aresolvedfinding causesfarm_historycalibration derived from that finding to be recomputed. This is stated as an Amendment C requirement onfarm_history; the exact recompute cadence is a Risk Model implementation detail. - Calibration provenance is inspectable. The
band_sourcefield in Amendment A already explains which layer resolved a band. Amendment C requires thatband_source: farm_historybe traceable to the specific findings that built it, and that the trace surface bothprovenanceandcorroboration_reffor each contributor. The resolver already explains itself; this extends that.
farm_history today without an opt-in) is honest about the platform’s stance that the human channel exists for hazards the satellite cannot see. Requiring corroboration for calibration keeps farm_history at observation-quality (what actually happened on this farm), not claim-quality (what someone said happened). The default is on because the corroborated finding is observation-quality; the safety comes from the corroboration gate, not from the default.
Semai Advisor retrieval
The advisor retrieveshazard_ref literature identically for both provenances. When a human finding has hazard_ref = unclassified, the advisor operates at Level 1 (“Answer with caveat”) per Failure Modes and cannot issue a Task from that finding without the user attaching a rule card reference or authoring the task manually. The safety floor applies to the advisor’s writes identically to any other caller; a human finding at severity_effective = high gates advisor artifacts the same way a machine finding at the same severity does.
Disclosure
Every surface that shows a finding must be able to say where it came from. State the rule; do not design the UI.- The provenance is a required disclosure. A row that hides
provenancefails the honesty test the product already applies to weak verification grades and stale imagery banners. - Machine findings display the rule card id and version they were computed from.
- Human findings display the author’s identity (identity, not just role) and the
observed_attimestamp. - A human finding with
acknowledged_bynull must be visually distinct from an acknowledged one on every surface that shows it, including notification bodies, the Activity feed, and Verification bundle previews. Unacknowledged is a property, not a state; the finding is live. - An acknowledged finding displays
acknowledged_by(identity and role) and, when the fallback rule was used, that the acknowledgement was recorded by anestate_managerbecause no other in-scopeagronomisthad been active in the preceding 24 hours. - A human finding displays
delivery_policy_at_creationwherever it crosses an organisational boundary: verification bundles, aggregation rollups that mix organisations, and any effect-methodology dashboard that does the same. Inside a single organisation the policy is a property of the organisation and does not need to be shown on every row. - A held
highfinding that delivered automatically at the 4-hour mute bound without acknowledgement displays that fact and the reason: “delivered on safety-floor bound, unacknowledged at 4 hours”. - A finding whose
severity_effectivediffers from the signal-layer indicator on the same field displays both, per the existingraise_contradictionpattern in analytics tabs. - A finding with
hazard_ref = unclassifieddisplays that literally; the platform must not invent a hazard label. - An
expiredorclosed_with_cyclefinding displays its terminal reason: “Expired unactioned on 12 Jul · window: 72 hours at high severity” or “Closed with cycle on 30 Sep · Main Season 1 · 2026”. - A
resolvedhuman finding displays its corroboration status: corroborated (and by what event) or uncorroborated.
The rule is that provenance is disclosed, not that it is loud. Disclosure is a data contract on every consumer, not a specification of chip colour, placement, or copy. Those decisions belong to the surface owners.
Seed
The Layer 4 seed already covers 12 fields across the four crops. To make both provenances reachable without inventing new fields, Amendment C adds these fixtures. Fixture ids follow the human-readable convention (fnd_ prefix per Field Data Model); no UUIDs.
The first fixture is the one that makes the argument. The rest exercise the corners.
Coverage properties this fixture set exercises against the existing 12-field seed:
- Fixture 01 demonstrates the point of the amendment: a hazard the satellite is correct not to flag.
- Every raising role in the table appears at least once.
- Acknowledgement on the normal path fires via fixture 05 (in-scope
agronomist); the fallback fires via fixture 05b (in-scopeestate_manageron a single-agronomist estate, exercising the author-exclusion clause of the fallback rule). - The delivery-policy hold and its safety-floor bound fire via fixture 11: a
highfinding on an organisation set tohold_until_acknowledged, held then auto-delivered at 4 hours without acknowledgement. raise_contradictionfires between fixtures 03 and 04.expiredfires via fixture 06;closed_with_cyclefires via fixture 09.- Corroborated (07) and uncorroborated (08)
resolvedfindings both exist, exercising bothfarm_historybehaviours. - The
regionalobservation lane fires via fixture 10. - One human finding (fixture 01) is bundled through Verification end-to-end at weak grade so the disclosure of the weak flag is exercised.
hazard_ref = unclassified. That path is exercised at runtime, not seeded, because seeding it would require inventing a hazard label the literature does not have.
Docs Delta
Amendment C is silent, ambiguous, or contradictory against the current docs in the places below. Each item is enumerated, not resolved silently.Open Questions
These are decisions the literature did not resolve. Amendment C enumerates them; it does not answer them.- Two-hour
criticalescalation timer. Amendment C escalates an unacknowledgedseverity_effective = criticalhuman finding toestate_manager(copyingorg_admin) at 2 hours. Delivery is not gated atcriticalunder either policy, so this is an acknowledgement-of-record timer rather than a delivery backstop; the audience has already been paged. The number came from the page rather than from observed on-call practice. Before the module ships, the timer should be validated against how the on-call rotation actually behaves: how quickly a peeragronomistis typically reachable on acriticalraise, and whether 2 hours is too long, correct, or too short. Do not change it without that evidence. - Delivery policy granularity. Amendment C sets the delivery policy per organisation. Estates within one agency may have different on-call maturity, and per-estate configurability is a defensible extension. Amendment C ships at organisation granularity; per-estate is deferred to a companion amendment.
- Expiry disclosure for unacknowledged findings. An unacknowledged finding that expires on its severity-scaled window is currently treated the same as any other unactioned expiry. Whether the expiry disclosure should carry the lack of acknowledgement forward (“expired unacknowledged” rather than “expired unactioned”), or whether the two are the same event on the record, is undecided.
- Inline vs. export disclosure of delivery policy for
regionalreaders. Aregionalofficer reading across organisations sees findings that passed different delivery policies. Amendment C requires disclosure at organisational boundaries but does not decide whether the policy chip is inline on every finding in a cross-organisation view or only on the exported bundle. Inline is more honest and noisier; export-only is quieter and easier to overlook. - Expiry as a yield-model input. Amendment C lands expiry as a lifecycle state with severity-scaled windows and disclosure. It does not wire expiry into
yield_impact.resolved. A companion amendment should decide the weight function (linear in days-overdue? capped at the mitigation window?), the composition rule with the existingyield_impact.resolved, and the machine-finding parallel (doestask.overdueon a machine finding also cost yield?). Until then, expiry is visible on every surface but does not move the yield forecast. farm_historydefault widening cadence. Corroborated-only is the default. The one-switch widening to “all resolved” is per-estate; whether the platform should nudge estates toward the widened setting after N seasons of clean corroboration history is undecided.- Human override of a machine finding. When a human finding at
severity_effective = highis paired with anactivemachine finding atlowon the same hazard, Amendment C freezes both and routes to agronomy review. Should the human finding’s severity dominate until review completes, or should both stay visible at their asserted values? The current draft picks freeze plus both visible; a “human dominates pending review” reading is defensible for time-critical hazards. - Retroactive human findings. May a human finding declare
observed_atolder than 72 hours? The Verification Model late-log rule applies to source events (72 hours), and this page inherits that bound implicitly. Whether an olderobserved_atis refused, accepted with a late-log flag, or accepted only inside the currentcrop_cycleis undecided. - Bulk import of human findings. Estate handovers, agency inspections, and cooperative onboarding all produce batches of retrospective observations. The rate limit above applies to interactive raises. A separate bulk-import path (with its own confirmations and stricter evidence requirements) is out of scope for Amendment C.
- Provenance for platform-authored corrections. A
systemactor writing a correction row (per Audit Envelope rule 1) is neithermachinenorhuman. The current draft treats corrections as append rows against the original finding, keeping the originalprovenance. Whether a third value (system_correction) is needed at the entity level is undecided.
Related
- Field Data Model — the entity hierarchy this page adds
findingto. - Risk Model — the
rulecard_firingshape Amendment C generalises, theactivity_bindingscontract human findings emit into, and theyield_impactresolverfarm_historyfeedback flows into. - Crop Cycle Models — the cycle boundaries
crop_cycle_refresolves against and theseason.closedevent that drivesclosed_with_cycle. - Verification Model — the source-event schema human findings map to.
- Aggregation Model — the hazard-count rollup that gains a provenance axis and the reproducibility requirement expiry disclosure serves.
- Guardrails Template — the eight categories this page fills.
- Role Model — the raising and acknowledgement authority table, including the
regionalobservation lane and theestate_managerfallback. - Effect Methodology — the outcome-attribution track that inherits
delivery_policy_at_creationdisclosure at organisational boundaries. - Audit Envelope — the envelope every finding write extends.
- Semai Advisor Overview — the safety floor
severity_effectiveresolves against, the tier-2 Proposal path for repeated hazard labels, and the Task-artifact path for AI-proposed merges. - Failure Modes — the degradation levels the advisor applies to
hazard_ref = unclassifiedfindings.