From 4467eb66a4c8a776e35e9644960eba699dc85e6f Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Fri, 2 Oct 2026 11:30:46 -0400 Subject: debug: green-eye porting automation - new-device and driver-version port scripts, simulator packaging, porting docs; control-discovery fix --- debug/risc-v-gsp-rm-vm/docs/00-OVERVIEW.md | 8 ++++++ .../docs/21-CI-RELEASE-PIPELINE.md | 16 +++++++---- .../docs/22-PORTING-CUDA-AND-DEVICES.md | 19 ++++++++----- debug/risc-v-gsp-rm-vm/docs/23-RM610-READINESS.md | 31 +++++++++++++--------- debug/risc-v-gsp-rm-vm/docs/26-ARCHITECTURE.md | 15 ++++++++--- debug/risc-v-gsp-rm-vm/docs/27-TOOL-AUDIT.md | 15 +++++++++++ 6 files changed, 77 insertions(+), 27 deletions(-) (limited to 'debug/risc-v-gsp-rm-vm/docs') diff --git a/debug/risc-v-gsp-rm-vm/docs/00-OVERVIEW.md b/debug/risc-v-gsp-rm-vm/docs/00-OVERVIEW.md index 3b56512..e4906cc 100644 --- a/debug/risc-v-gsp-rm-vm/docs/00-OVERVIEW.md +++ b/debug/risc-v-gsp-rm-vm/docs/00-OVERVIEW.md @@ -52,6 +52,7 @@ whole stack scriptable, and QEMU is just the first execution backend. | Host RM oracle harness (`rmharness`) | wrappers + capture working; device tables depend on driver permissions (17) | | First-touch device map + lenient native MMIO | working (24) | | MCP server (`plugins/mcp_server.py`) | working (20); stdlib-only, read-only by default | +| Porting automation + trial packaging (28/29) | scaffolds + tests present; unadmitted pilots (dry-run default) | | Native M2+ device model | roadmap only (08, 16) | ## Quick start @@ -102,6 +103,8 @@ Interactively: | [25-VALUE-VALIDATION](25-VALUE-VALIDATION.md) | value-validation demos s01–s10 | | [26-ARCHITECTURE](26-ARCHITECTURE.md) | full architecture and API surface map | | [27-TOOL-AUDIT](27-TOOL-AUDIT.md) | tool audit: purpose, tests, usage, status | +| [28-PORTING-AUTOMATION](28-PORTING-AUTOMATION.md) | driver-version sweep and new-device scaffolds (pilot) | +| [29-PACKAGING-AND-TRIALING](29-PACKAGING-AND-TRIALING.md) | trial simulation packages (pilot) | | [GREEN-EYE-ROADMAP](../GREEN-EYE-ROADMAP.md) | long-term program H1–H7 | ## Where this fits in the Open-IOV workflow @@ -120,3 +123,8 @@ The intended accuracy loop is: run the same workload against the real GSP-RM (hardware or mdev), record its RPC/state behaviour, then run the firmware in green-eye, record the same events, and compare with `compare` (see 06 and 07). + + diff --git a/debug/risc-v-gsp-rm-vm/docs/21-CI-RELEASE-PIPELINE.md b/debug/risc-v-gsp-rm-vm/docs/21-CI-RELEASE-PIPELINE.md index d687cca..aa71b54 100644 --- a/debug/risc-v-gsp-rm-vm/docs/21-CI-RELEASE-PIPELINE.md +++ b/debug/risc-v-gsp-rm-vm/docs/21-CI-RELEASE-PIPELINE.md @@ -249,11 +249,13 @@ the docs/14 §6 pack; the docs/23 §4 step 7 expected-artifact list maps 1:1. * runs `python3 -m unittest discover -s tests -t .` from the tool root (QEMU integration tests run; if QEMU were absent they skip cleanly). -The intended release gates this workflow covers are the fast inventory smoke -from docs/19 §6 (`control_discovery --max-id 32 --patterns zero`), the harness -suites, and the docs/21 dry-run. A full `ci_release` run against real firmware -is driven manually/agentically because it needs the versioned inputs and -symbol DBs; CI-adjacent automation should call it with `--dry-run` first. +The release gates this workflow reaches are the harness suites: the docs/19 §6 +fast inventory smoke runs inside `tests/test_discovery.py`, and the docs/21 +dry-run is covered by `tests/test_version_diff.py`. The workflow does not run +`control_discovery` or `ci_release` as standalone steps. A full `ci_release` +run against real firmware is driven manually/agentically because it needs the +versioned inputs and symbol DBs; CI-adjacent automation should call it with +`--dry-run` first. --- @@ -318,3 +320,7 @@ or the demo ELF is absent. | **V1 — metrics/golden data** | deterministic self-diff and stable JSON reports support golden comparisons | | **docs/23 C5/C7** | release pipeline implemented and exercisable; dry-run rehearsal path | | **H7 — agentic harness** | self-describing bundle + docs/20 MCP tools for monitored runs | + + diff --git a/debug/risc-v-gsp-rm-vm/docs/22-PORTING-CUDA-AND-DEVICES.md b/debug/risc-v-gsp-rm-vm/docs/22-PORTING-CUDA-AND-DEVICES.md index 30f4720..ad8a5e7 100644 --- a/debug/risc-v-gsp-rm-vm/docs/22-PORTING-CUDA-AND-DEVICES.md +++ b/debug/risc-v-gsp-rm-vm/docs/22-PORTING-CUDA-AND-DEVICES.md @@ -71,7 +71,7 @@ tools/cudatool.py delta /run/libcuda.so. /run/libcuda.so. | Step | Existing project tooling | green-eye addition | |---|---|---| | Export/interface diff | `tools/cudatool.py delta` | — | -| Function matching / name-transfer measurement | `tools/cudatool.py fdematch --names ` | — | +| Function matching / name-transfer measurement | `tools/cudatool.py fdematch --names ` | — | | Corpus-level diff (added/removed/resized functions) | `tools/diff_corpus.py ` | — | | Name transfer + corpus annotation | `ApplyNameMap.java` (`--dry-run` first), `tools/annotate_corpus.py` | `./greeneye.sh symbols export` builds a runtime-address symbol DB from the same index/names | | Driver-API smoke | `tools/test/cuda_drv_test.c` compiled as `/tmp/cdt` (prints `ALL OK`) | `./greeneye.sh symbols resolve --db ... ` spot-checks transferred addresses per call path | @@ -241,9 +241,11 @@ The project's support ladder is `docs/06-portability/hardware-software-matrix.md 1. Run `harness/portability_matrix.py` across the reference and candidate device firmware with the same scenario options (docs/18 §1); keep `/portability-report.json`, per-pair compare reports and sessions. -2. The planned version-diff/CI pipeline (docs/21-CI-RELEASE-PIPELINE.md, - planned) is where those reports become release-gated artifacts; until it - exists, attach them to the matrix process manually. +2. The version-diff/CI pipeline + ([`docs/21`](21-CI-RELEASE-PIPELINE.md)) packages those reports into + release-gated artifacts; the porting scaffolds + ([`docs/28`](28-PORTING-AUTOMATION.md)) wrap it per version as unadmitted + pilots (evaluation in future-eng-ops F2/F3). 3. Update the device profile (documentation today; `config/hardware/*.yaml` is not read by code — do not claim configuration-driven portability). 4. Validate on the physical device with the supervised harness before claiming @@ -345,9 +347,14 @@ Architecture (P3): | Differential execution and reimplementation loop | H4.5 | every port lands with A/B sessions and the M1–M6 table | reference-capture pipeline | | Adjacent-controller work for GB10-class bring-up | H5 | PMU/SEC2/ACR/SOE models, cross-controller sessions | H2.2 | | Multi-target orchestration | R6 / docs/18 | one report across firmware/device targets | v0.1 stable | -| Version diff and release gating | planned (docs/21) | CI pipeline that gates a port on the evidence bundle | pipeline implemented | -| Control discovery | planned (docs/19) | systematic control/class inventory across versions | document exists | +| Version diff and release gating | implemented (docs/21) | CI pipeline that gates a port on the evidence bundle | pipeline implemented | +| Control discovery | implemented (docs/19) | systematic control/class inventory across versions | document exists | Program-level success criterion served here: a new GSP version (or device) can be triaged — inventory diff + behaviour diff + metric table — in **hours**, with recorded evidence. + + 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 index 18d93bd..72e0e62 100644 --- a/debug/risc-v-gsp-rm-vm/docs/23-RM610-READINESS.md +++ b/debug/risc-v-gsp-rm-vm/docs/23-RM610-READINESS.md @@ -53,13 +53,13 @@ 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) | +| 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 | tools implemented (docs/00); fresh full-suite run pending | +| C2 | Tests green | `make test` and the harness/rmharness suites pass | transcript with date and commit | green at v0.1; re-run pending (155 tests, docs/27) | | 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)** | +| C4 | MCP monitoring works | MCP plugin implemented and exercised (roadmap R3, docs/08; docs/15) | tool list + a monitored run | implemented (docs/20); monitored run not yet attached | +| C5 | CI pipeline works | release/CI pipeline implemented and exercised (docs/21) | pipeline run with artifacts | implemented (docs/21); current-version run pending | | 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) | +| C7 | Discovery/version-diff/CI exercised on the current version | control discovery (docs/19) + `harness/portability_matrix.py` + `compare` + pipeline dry-run on 570.144 | report + session hashes | partial (docs/19/21 implemented; current-version run pending) | | 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 | @@ -116,9 +116,9 @@ Required results: 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 +* [ ] `docs/19-CONTROL-DISCOVERY.md` exists and has been run once on the + current version, or C7 is explicitly waived; +* [ ] `docs/21-CI-RELEASE-PIPELINE.md` 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 @@ -158,10 +158,11 @@ must not happen beforehand. `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. +6. **Pipeline dry-run, then real.** Run the release pipeline + ([`21-CI-RELEASE-PIPELINE.md`](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; @@ -257,3 +258,9 @@ Approval ID: ; Date: ; Scope limits: 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. + + diff --git a/debug/risc-v-gsp-rm-vm/docs/26-ARCHITECTURE.md b/debug/risc-v-gsp-rm-vm/docs/26-ARCHITECTURE.md index 326533b..ab8414a 100644 --- a/debug/risc-v-gsp-rm-vm/docs/26-ARCHITECTURE.md +++ b/debug/risc-v-gsp-rm-vm/docs/26-ARCHITECTURE.md @@ -259,9 +259,9 @@ argument schemas for all 24 tools are in 20 §5. ## 9. Automation harness `harness/` turns the playbooks into repeatable, self-describing runs. Modules -bootstrap the tool root and use the QEMU backend by default (18, 19, 21); -`common.py` provides flat-image relocation, session helpers and bounded log -reads. +bootstrap the tool root and use the QEMU backend by default (18, 19, 21, 28, +29); `common.py` provides flat-image relocation, session helpers and bounded +log reads. ```mermaid flowchart TB @@ -293,6 +293,9 @@ flowchart TB | `version_diff.py` | old vs new image: shape, symbols, corpus hints, probe, behavior, M1–M6 | `version-diff.json/.md`, `corpus/`, `compare/` | 21 §2 | | `ci_release.py` | version_diff → matrix → mutation smoke, then hash the bundle | `release-report.json`, `bundle-manifest.json` | 21 §4 | | `value_demos/run_all.py` | ten fixed scenarios (reply, counters, discovery, reach, diff, inject, version, mutation, Ghidra, evidence) | `artifacts/results.json` + per-demo JSON | 25 | +| `port_driver_versions.py` | version-list sweep of version_diff + matrix + mutation (dry-run default; unadmitted pilot) | per-version bundles + `sweep-summary.json/.md` | 28 §2 | +| `port_new_device.py` | device-port scaffold: profile, probe, symbols, matrix, checklist (dry-run default; unadmitted pilot) | `device-port.json/.md`, `port-checklist.json/.md`, bundle | 28 §3 | +| `package_sim.py` | build/run a trial simulation package (unadmitted pilot) | package tree + `manifest.json`, `results.json` | 29 | | `common.py` | shared setup (relocate to `0x80000000`, open session, bounded logs) | library | 18 §1.2 | Harness limits are intentional: QEMU/re-hosted/demo code only; no hardware, @@ -442,8 +445,12 @@ Invariants (enforced by tests or review): Section diagrams and their backing docs: §2 suite (00, 01, README); §3 dispatch (01, 03); §4 backends (01 §8, 16 §4–5); §5 recording (01 §6, 09, 12 §6, 16 §10, 17 §5); §6 injection (11, 12); §7 Ghidra (05, 13); §8 MCP (20); -§9 harness (18, 19, 21); §10 device map (24, 16 §7); §11 OODA (06, 07 P4, 25 +§9 harness (18, 19, 21, 28, 29); §10 device map (24, 16 §7); §11 OODA (06, 07 P4, 25 §7). Roadmap keys: R3 = MCP (08), R5 = mutation (18), R6 = multi-version (18, 21), H1.3 = RM service injection (GREEN-EYE-ROADMAP), H2.2 = QEMU device model, H3/M1–M6 = native simulator (16), H4 = adversarial navigation (14), H7 = agentic platform (15, 20). + + diff --git a/debug/risc-v-gsp-rm-vm/docs/27-TOOL-AUDIT.md b/debug/risc-v-gsp-rm-vm/docs/27-TOOL-AUDIT.md index e208253..86f2b06 100644 --- a/debug/risc-v-gsp-rm-vm/docs/27-TOOL-AUDIT.md +++ b/debug/risc-v-gsp-rm-vm/docs/27-TOOL-AUDIT.md @@ -250,3 +250,18 @@ Files changed by this audit: Verification after the changes: 155/155 unit tests OK; docs-link check OK (55 files); every smoke in section 0 re-run green. + +## 11. Post-audit additions (not yet audited) + +`harness/port_driver_versions.py`, `harness/port_new_device.py` and +`harness/package_sim.py` with docs 28/29 landed after this audit; their tests +are `tests/test_porting_automation.py` and `tests/test_package_sim.py` (main +suite). They are unadmitted pilots under `eng-ops.md` §2 and have not had a +tool-audit pass, so treat their status as `needs improvement (open)` until one +does; docs 28/29 carry the exit-code and failure readings that the audit would +otherwise record. + + -- cgit v1.2.3