diff options
Diffstat (limited to 'debug/risc-v-gsp-rm-vm/docs/23-RM610-READINESS.md')
| -rw-r--r-- | debug/risc-v-gsp-rm-vm/docs/23-RM610-READINESS.md | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/debug/risc-v-gsp-rm-vm/docs/23-RM610-READINESS.md b/debug/risc-v-gsp-rm-vm/docs/23-RM610-READINESS.md new file mode 100644 index 0000000..18d93bd --- /dev/null +++ b/debug/risc-v-gsp-rm-vm/docs/23-RM610-READINESS.md @@ -0,0 +1,259 @@ +# 23 — RM 610 port readiness and approval gate + +> **# TOOL IN DEVELOPMENT - NOT READY YET!** See 00-OVERVIEW for status. +> This document defines the gate, not a claim: readiness is **not** met today +> (2026-10-02). It exists so no one starts the port early. + +**The RM 610 port begins only after explicit human approval.** That is a hard +gate, not a scheduling preference: until a named human approves it in writing, +nothing in this repository fetches, downloads, extracts or analyses a 610 GSP +firmware image, and no code or document treats 610 as an anchor or a supported +target. The gate is repeated in the sign-off checklist (§6) and is the first +thing the approval message must acknowledge. + +## 1. Hard gate + +| Rule | Meaning | +|---|---| +| No acquisition | No 610 runfile, GSP `.fwimage`, driver package or firmware blob is fetched, extracted, copied or mirrored before approval. | +| No analysis | No decompilation, symbol export, probe, corpus diff or pairing comparison against a 610 image before approval. | +| No emulation edits | No version-keyed handler, signature entry or profile edit justified by "610" before approval; changes require current-version evidence. | +| No physical-GPU work | No unsupervised physical-GPU cycle, mdev claim or driver bind/unbind for 610; the project rule is no unattended physical-GPU cycles (GREEN-EYE-ROADMAP H7). | +| No support claims | 610 is not entered in the hardware/software matrix or the version matrix until it passes the docs/22 port checklists with evidence. | + +Precision notes: + +* The pinned `nvidia-open-gpu-kernel-modules` checkout used as build glue + (recorded in `SBOM.md`) is **not** a GSP firmware image and is **not** a 610 + port; it neither authorises acquisition nor counts as analysis. +* This document, docs/22 and the current-version test runs are the only + 610-adjacent work permitted today. Everything else waits for approval. +* Approval is scoped and revocable: it covers named inputs and named + activities, on a named date, by a named approver. + +### 1.1 What approval does and does not cover + +| Approval covers | Approval does not cover | +|---|---| +| Acquiring the named 610 inputs through the named channel | Any other 610 artifact or channel not listed in the approval message | +| Analysis, probing, diffing and evidence capture on the 610 inputs | Merging an emulation change without the docs/22 A/B evidence | +| Running the docs/22 port workflow and the pipeline dry-run | Physical-GPU execution without a separate supervised plan | +| Publishing 610 evidence into the port log | Entering 610 as "Supported" in the matrix before validation | +| Re-asking for a scope extension | Retroactively blessing work done before approval | + +An approval with an open-ended scope is invalid; ask again with the specific +inputs and activities. A denied or expired approval leaves the repo in the +state described in §5. + +## 2. Readiness criteria (all must be true) + +Every row must pass on the **current anchor** (570.144) before approval is even +requested. "All must be true" is literal: a single open item keeps the gate +closed. + +| # | Criterion | How it is verified | Evidence | Status today | +|---|---|---|---|---| +| C1 | All tools implemented and tested on the current driver/firmware | full test suites green (documents/demo/probe/inject/Ghidra/harness) | test logs attached to the request | partial (MCP/CI missing) | +| C2 | Tests green | `make test` and the harness/rmharness suites pass | transcript with date and commit | green at v0.1 (55 tests) | +| C3 | Demo, probe, inject, Ghidra work | `./greeneye.sh demo`, `probe`, `inject`, `ghidra` all demonstrated | session dirs + transcript | working per docs/00 | +| C4 | MCP monitoring works | MCP plugin implemented and exercised (roadmap R3, docs/08; docs/15) | tool list + a monitored run | **not implemented (planned R3)** | +| C5 | CI pipeline works | release/CI pipeline implemented and exercised (planned docs/21) | pipeline run with artifacts | **not implemented (planned docs/21)** | +| C6 | Docs complete and accurate | doc review checklist (§3.2) signed | review record | to complete | +| C7 | Discovery/version-diff/CI exercised on the current version | control discovery (planned docs/19) + `harness/portability_matrix.py` + `compare` + pipeline dry-run on 570.144 | report + session hashes | partial (matrix/compare exist; docs/19 planned) | +| C8 | Harness produces a full evidence bundle | docs/07 checklist + docs/14 §6 pack produced end to end for a current-version port rehearsal | bundle directory with SHA-256 inventory | to complete | +| C9 | Human has approved | signed message (§6) | approval ID recorded in the request thread | pending | + +C4 and C5 are the long poles. Do not silently downgrade them: if the human +chooses to waive a criterion, the waiver is written into the approval message +with its risk and the affected scope. + +## 3. What "ready" looks like concretely + +### 3.1 Exact commands that must pass + +Run from `open-iov/debug/risc-v-gsp-rm-vm/` (docs/02 §8 has the make targets): + +```bash +make demo +make test +python3 -m unittest tests.test_harness -v +python3 rmharness/tests/test_rmharness_plugin.py +./greeneye.sh info +./greeneye.sh demo +./greeneye.sh demo --backend native +./greeneye.sh probe +./greeneye.sh inject +./greeneye.sh symbols export --index <export.tsv> --bias 0 -o symbols-<ver>.json +./greeneye.sh analyze dumps/<run> --symbols symbols-<ver>.json +./greeneye.sh compare dumps/<a> dumps/<b> --symbols +``` + +Plus, on the current version: + +```bash +python3 harness/portability_matrix.py \ + --target firmware/uproc_demo/build/uproc_demo.elf \ + --target firmware/uproc_demo/build/uproc_demo.elf \ + --out dumps/matrix-selfcheck +python3 harness/mutation_harness.py --out dumps/mutation-selfcheck \ + --iterations 12 --seed 7 +python3 harness/mutation_harness.py --out dumps/mutation-replay \ + --iterations 12 --seed 7 +``` + +Required results: + +* every suite green, with installed QEMU; skips are explained, not ignored; +* `portability_matrix` self-comparison reports **zero deltas** (`all_zero`); +* mutation `findings.jsonl` is byte-identical between the two seeded runs; +* `greeneye compare` on two identical runs is empty; +* `analyze` renders a coherent session (hook/watch/breakpoint events, UART + banner liveness per docs/06 §7). + +### 3.2 Doc review checklist + +* [ ] 00–18 match the code on the current commit (commands, flags, status + tables, test counts); +* [ ] `docs/22` porting guide is accurate for the current tools; planned items + are labelled `planned (docs/xx)`; +* [ ] `docs/19-CONTROL-DISCOVERY.md` (planned) exists and has been run once on + the current version, or C7 is explicitly waived; +* [ ] `docs/21-CI-RELEASE-PIPELINE.md` (planned) exists and has run once on the + current version, or C5 is explicitly waived; +* [ ] `GREEN-EYE-ROADMAP.md` and `docs/08` status claims match reality; +* [ ] no local source paths, no invented command names, no unsupported + "supported/accurate" claims. + +### 3.3 Golden sessions and regression data in place + +* [ ] golden demo session(s) checked in or reproducible by a documented seed; +* [ ] matrix self-comparison zero-delta output archived; +* [ ] mutation replay corpus archived with its seed and budget; +* [ ] rmharness host-oracle captures for the current anchor archived + (`rmtool engine list --format=json`, `mem stats --format=json`); +* [ ] a full current-version evidence bundle (docs/07 checklist + docs/14 §6) + produced once, as the rehearsal for the 610 run. + +## 4. Dry-run plan for the day of approval (no execution today) + +Executed only after the approval in §6 exists. Steps 1–2 are acquisition and +must not happen beforehand. + +1. **Confirm the approval.** Record approval ID, approver, date, scope and any + waived criterion in the port log. +2. **Obtain the 610 inputs through the approved channel.** The 610 driver + runfile and matching GSP `.fwimage` (or the approved firmware source) are + fetched through the channel named in the approval. Record the runfile + version, firmware hash (MD5/SHA-256), version string and image family + immediately; extract the `.fwimage` per docs/05-operations §4.1 step 1. +3. **Lay down versioned directories.** `firmware/<SERIES>-GSP/610/`, + `userspace/cuda/610/` (copied skeleton), `config/versions/610.yaml` + (documentation until the load path reads it). Never overwrite a working + version; keep 570.144 untouched. +4. **Pair and probe.** Build the 610 symbol DB (`analyze_fwimage.py`, + `symbols export --bias 0`), probe the 610 image and the 570.144 reference + with the same bounded settings, and diff the first-touch maps. Pairing + mismatch stops the run here. +5. **Baseline vs candidate orchestration.** Run + `harness/portability_matrix.py` with the 610 and 570.144 targets and + identical scenario options; run the mutation harness once per version with + the same seed; archive both reports and every session. +6. **Pipeline dry-run, then real.** Run the release pipeline (planned + docs/21-CI-RELEASE-PIPELINE.md) in its dry-run mode first; inspect the + planned artifact list without publishing. Only after the dry-run is clean, + run the real pipeline on the 610 evidence bundle. +7. **Expected artifacts.** + * approval record and input hashes; + * 610 symbol DB + Ghidra export provenance; + * probe reports (610 and reference) and the first-touch diff; + * `portability-report.json`/`.md`, per-pair compare reports, sessions; + * mutation `findings.jsonl` + summary for both versions; + * M1–M6 table with reference-capture method and L2/L3 limits; + * doc updates per docs/22 §3.5/§4 and the matrix entry (if and only if the + support claim is earned). +8. **Decision points.** Stop and keep the current anchor if: pairing is + ambiguous; any unexplained probe delta remains; the engine/RPC inventory + diff is not fully explained; M1–M6 regress on the current workload; the + evidence bundle is incomplete. Forward only when every delta has a decided + response. +9. **Rollback / keep-old-version rules.** The 570.144 directories, + configuration and guest driver stay untouched; rollback = return to the old + anchor commit/tag and the old guest driver (docs/05-operations §4.1 step 6). + A forward attempt never destroys the working setup; do not delete the old + version tree and do not reuse 570.144-derived addresses for 610. + +## 5. What must NOT happen before approval + +| Prohibited action | Why it is prohibited | +|---|---| +| Download/fetch 610 blobs or runfiles | Version discipline and evidence integrity: an unapproved input hash cannot anchor a later claim; acquisition is the act the gate exists to control. | +| Probe or decompile a 610 image | Analysis before readiness contaminates the evidence chain and tempts ad-hoc emulation edits. | +| Edit emulation code "for 610" | No current-version evidence justifies it; version-keyed handlers must be driven by a measured inventory diff (docs/05-operations §4.1 step 4). | +| Touch the physical GPU for 610 | Project hard rule: no unattended physical-GPU cycles; physical validation is a supervised step after approval. | +| Try the 610 driver in a guest | The guest never contains Open-IOV code and the anchor is fixed; an unpaired driver failure looks like an emulation bug (docs/07 P2.2). | +| Record 610 in the support/version matrix | Support means tested and documented; an untested entry violates the matrix contract (hardware-software-matrix §1/§6). | +| Treat the pinned open-module tag as approval | Build glue is not a GSP image and not an authorised port input (SBOM.md). | + +Permitted before approval: reading this document and docs/22, running all +current-version tests, producing and archiving the current evidence bundle, +and preparing the approval request. + +## 6. Sign-off checklist and approval message + +### 6.1 Human sign-off (one page) + +* [ ] **The RM 610 port begins only after explicit human approval.** +* [ ] C1–C9 all true, or each waiver is listed with its scope and risk. +* [ ] Test transcript attached (date, commit, `make test` green). +* [ ] `portability_matrix` self-comparison zero deltas; mutation replay + byte-identical. +* [ ] Doc review checklist (§3.2) complete. +* [ ] Current-version evidence bundle complete with SHA-256 inventory. +* [ ] Golden sessions/regression data in place (§3.3). +* [ ] Approval message (§6.2) sent and answered with an approval ID. +* [ ] Named approver accepts the acquisition scope and the permitted channel. + +``` +Approver: ______________________ Role: ______________________ +Approval ID: ____________________ Date: ______________________ +Scope limits / waivers: ________________________________________ +Signature: ______________________ +``` + +### 6.2 Approval request message (exact format) + +Send exactly this shape; fill every `<...>` and leave "Waivers" as "none" if +empty: + +``` +RM 610 PORT APPROVAL REQUEST + +Anchor today: 570.144 (firmware <sha256>; guest driver <md5>) +Target: RM 610 (requested input: <runfile version / approved source>) +Requested scope: acquire the 610 driver + GSP firmware through <approved +channel>; lay down versioned dirs; analyse, probe, diff, and run the docs/22 +port workflow; no product change before A/B evidence. + +Readiness, docs/23 §2: + C1 tools tested .......... <pass / waived> + C2 tests green ........... <pass / waived> + C3 demo/probe/inject/Ghidra <pass / waived> + C4 MCP monitoring ........ <pass / waived> + C5 CI pipeline ........... <pass / waived> + C6 docs complete ......... <pass / waived> + C7 discovery/diff/CI ..... <pass / waived> + C8 evidence bundle ....... <pass / waived> + C9 human approval ........ requested by this message + +Waivers: <none / list with reason> +Evidence bundle: <path> +Commit: <git rev>; transcripts: <paths> +Signed: <name/role>, <date> + +Decision (human): APPROVED / DENIED +Approval ID: <id>; Date: <date>; Scope limits: <text> +``` + +After approval, the 610 port proceeds only through the docs/22 workflow and +the docs/05-operations §4.1 version discipline. Until that message exists, +this repository is a 610 no-fly zone. |
