|
| 1 | +<!-- SPDX-License-Identifier: MPL-2.0 --> |
| 2 | +<!-- SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> --> |
| 3 | +<!-- Deposited report: Hypatia alert classification for echidna, 2026-06-06 --> |
| 4 | + |
| 5 | +# Hypatia Alert Classification Report |
| 6 | + |
| 7 | +Repository: `hyperpolymath/echidna` |
| 8 | + |
| 9 | +Date: 2026-06-06 |
| 10 | + |
| 11 | +This deposited report classifies the non-Dependabot code-scanning state seen in |
| 12 | +`echidna`. It separates scanner/reporting debris from real repository work, and |
| 13 | +it records which work should be handled by existing systems, extended systems, |
| 14 | +or human/specialist review. |
| 15 | + |
| 16 | +## Open Alert Count |
| 17 | + |
| 18 | +GitHub code scanning showed 249 open alerts. |
| 19 | + |
| 20 | +| Bucket | Count | Classification | Route | |
| 21 | +| --- | ---: | --- | --- | |
| 22 | +| Hypatia `code_scanning_alerts/CSA001` self-echo | 27 | Reporting debris | Standards/Hypatia SARIF fix, then clear stale alerts | |
| 23 | +| Structural stale refs: `SD022`, `SD007` | 28 | Lifecycle hygiene | PR-only documentation/state cleanup | |
| 24 | +| Workflow and Scorecard control-plane hygiene | 51 | CI/security control | Existing PR machinery, conservative batching | |
| 25 | +| ReScript migration findings | 73 | Language migration | Batch by subsystem, PR-only | |
| 26 | +| Runtime crash/availability code safety | 45 | Source risk | Context-aware PRs, no blind rewrites | |
| 27 | +| FFI/proof/memory-safety findings | 22 | High-risk source/proof boundary | Specialist review, proof route, report-only by default | |
| 28 | +| Environment/report-only findings | 3 | Control-plane topology | Observe, model, and route manually | |
| 29 | + |
| 30 | +## Findings Expected To Dissolve |
| 31 | + |
| 32 | +The 27 `code_scanning_alerts/CSA001` alerts are not source work in `echidna`. |
| 33 | +They should dissolve after: |
| 34 | + |
| 35 | +1. the standards reusable SARIF converter stops uploading `code_scanning_alerts` |
| 36 | + meta-findings; |
| 37 | +2. the next authoritative Hypatia run uploads an empty or reduced Hypatia SARIF |
| 38 | + result set for that rule family; |
| 39 | +3. stale GitHub code-scanning alerts clear or are dismissed with rationale. |
| 40 | + |
| 41 | +Related issue: <https://github.com/hyperpolymath/standards/issues/378> |
| 42 | + |
| 43 | +## Real Work Buckets |
| 44 | + |
| 45 | +### Workflow and Scorecard Hygiene |
| 46 | + |
| 47 | +These are mostly easy or existing-system work. They include missing |
| 48 | +`timeout-minutes`, Scorecard token-permission issues, and specific workflow |
| 49 | +audit findings such as CodeQL language coverage and secret-action gates. |
| 50 | + |
| 51 | +Recommended handling: |
| 52 | + |
| 53 | +- set proportional timeouts, not a universal 10-minute value; |
| 54 | +- let Scorecard/CodeQL work already in flight finish before duplicating work; |
| 55 | +- use PR-only mode; |
| 56 | +- verify workflows with focused CI. |
| 57 | + |
| 58 | +Related issue: <https://github.com/hyperpolymath/echidna/issues/241> |
| 59 | + |
| 60 | +### ReScript Migration |
| 61 | + |
| 62 | +The 73 migration findings should be treated as one language-migration campaign, |
| 63 | +not 73 isolated defects. |
| 64 | + |
| 65 | +Recommended handling: |
| 66 | + |
| 67 | +- group by API and subtree; |
| 68 | +- preserve deliberate externals and FFI bindings with local rationale; |
| 69 | +- batch migration work by subsystem; |
| 70 | +- avoid whole-tree automatic rewrites without build verification. |
| 71 | + |
| 72 | +Related issue: <https://github.com/hyperpolymath/echidna/issues/240> |
| 73 | + |
| 74 | +### Structural Drift |
| 75 | + |
| 76 | +The 28 structural findings are stale references in docs and machine-readable |
| 77 | +state. They are low-risk when the canonical replacement path is known. |
| 78 | + |
| 79 | +Recommended handling: |
| 80 | + |
| 81 | +- map each old path to a current path or tombstone; |
| 82 | +- keep machine-readable state parseable; |
| 83 | +- update references in PR-only mode. |
| 84 | + |
| 85 | +Related issue: <https://github.com/hyperpolymath/echidna/issues/242> |
| 86 | + |
| 87 | +### Runtime Code Safety |
| 88 | + |
| 89 | +The unwrap, expect, panic, and lock-unwrap findings are plausible source-risk |
| 90 | +signals. Some may be test-only or invariant-protected; others need proper error |
| 91 | +propagation. |
| 92 | + |
| 93 | +Recommended handling: |
| 94 | + |
| 95 | +- separate tests and fixtures from production paths; |
| 96 | +- replace production panics with typed errors only where behavior is preserved; |
| 97 | +- avoid replacing `unwrap()` with default values that could corrupt prover |
| 98 | + state. |
| 99 | + |
| 100 | +Related issue: <https://github.com/hyperpolymath/echidna/issues/239> |
| 101 | + |
| 102 | +### FFI, Memory, And Proof Boundary |
| 103 | + |
| 104 | +The unsafe block, raw pointer, `mem_forget`, Zig pointer cast, and Agda |
| 105 | +postulate findings are high-risk. They should not be auto-fixed from pattern |
| 106 | +matching alone. |
| 107 | + |
| 108 | +Recommended handling: |
| 109 | + |
| 110 | +- route to echidnabot or proof review; |
| 111 | +- require focused tests or proof obligations; |
| 112 | +- use report-only unless a proven recipe exists. |
| 113 | + |
| 114 | +Related issue: <https://github.com/hyperpolymath/echidna/issues/239> |
| 115 | + |
| 116 | +## Summary By Action Class |
| 117 | + |
| 118 | +| Action class | Count | Notes | |
| 119 | +| --- | ---: | --- | |
| 120 | +| Dissolve as stale/reporting debris | 27 | Self-echo SARIF artifacts | |
| 121 | +| Trivial/easy existing-system PR work | 79 | Workflow/Scorecard plus structural docs/state | |
| 122 | +| Readily accommodated by extended system | 118 | ReScript migration plus runtime code-safety with context | |
| 123 | +| High risk, specialist review only | 22 | FFI/proof/memory boundary | |
| 124 | +| Report-only environment topology | 3 | Needs environment self-modeling | |
| 125 | + |
| 126 | +## Ordering |
| 127 | + |
| 128 | +The safe order is: |
| 129 | + |
| 130 | +1. Fix the self-echo reporting path and clear stale alert debris. |
| 131 | +2. Let relevant in-flight GitHub Actions, CodeQL, Scorecard, and Dependabot |
| 132 | + work finish when it covers the same class. |
| 133 | +3. Apply workflow and structural hygiene PRs. |
| 134 | +4. Run the ReScript migration campaign by subsystem. |
| 135 | +5. Triage runtime code-safety paths. |
| 136 | +6. Hold FFI/proof/memory-safety items for specialist review. |
| 137 | + |
| 138 | +Doing this out of order can create more work than it removes. For example, |
| 139 | +rewriting source before clearing stale SARIF debris makes alert counts look |
| 140 | +worse, and blind workflow timeout edits can break formal or live-prover jobs. |
| 141 | + |
| 142 | +## Portfolio Note |
| 143 | + |
| 144 | +For `Git in the Time of NeSy Agency`, this report is an example of repository |
| 145 | +portfolio triage: the useful unit is not a raw alert, but a classified work |
| 146 | +order with route, cost, risk, and expected class-collapse. |
0 commit comments