Native EriX session-scoped process monitor with CPU, memory and job accounting views.
  • Rust 99.3%
  • Linker Script 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Erik Inkinen a6829676b8
All checks were successful
CI / markdown (push) Successful in 9s
CI / rust (push) Successful in 1m31s
chore: Merge native CLI development into main
Merge the selected feature/native-cli history with an explicit two-parent commit so main retains the development lineage and the validated source snapshot. The resulting tree is identical to the selected feature commit; no dependency pins or runtime behavior are changed by this merge.

Previous main: 1639131249
Selected feature: ea13d61922

Publish this integration point following the requested cross-repository merge. Preserve the feature branch and immutable dependency objects for reproducibility; do not squash, rebase or rewrite existing commits.
2026-09-12 08:28:42 +03:00
.github build: Pin dependency and CI helper source commits 2026-09-12 07:34:12 +03:00
manifests feat: Implement the native extop monitor 2026-08-21 04:29:21 +03:00
src fix: Preserve complete monitor output lines 2026-08-21 04:57:38 +03:00
.editorconfig Initial commit 2026-08-05 19:48:30 +02:00
.gitignore Initial commit 2026-08-05 19:48:30 +02:00
.markdownlint-cli2.yaml Initial commit 2026-08-05 19:48:30 +02:00
ARCHITECTURE.md build: Pin dependency and CI helper source commits 2026-09-12 07:34:12 +03:00
Cargo.toml build: Pin dependency and CI helper source commits 2026-09-12 07:34:12 +03:00
CODE_OF_CONDUCT.md docs: Synchronize shared contribution and review policies 2026-09-12 06:38:11 +03:00
CONTRIBUTING.md build: Pin dependency and CI helper source commits 2026-09-12 07:34:12 +03:00
LICENSE Initial commit 2026-08-05 19:48:30 +02:00
linker.ld feat: Implement the native extop monitor 2026-08-21 04:29:21 +03:00
README.md build: Pin dependency and CI helper source commits 2026-09-12 07:34:12 +03:00
ROADMAP.md fix: Preserve complete monitor output lines 2026-08-21 04:57:38 +03:00
rustfmt.toml Initial commit 2026-08-05 19:48:30 +02:00
SECURITY.md docs: Synchronize shared contribution and review policies 2026-09-12 06:38:11 +03:00

extop

extop is the native EriX process monitor. It is a dynamically linked, freestanding executable installed on the ext4 runtime partition and launched through launchd, loaderd, dynlinkd, and procd after the partition is mounted.

Purpose of This Repository

The monitor renders a top-like terminal view containing:

  • every processor reported by the explicit topology snapshot, with utilization derived from monotonic busy/total counter deltas between successful sweeps
  • allocator-domain used and total bytes, with percentage defined as allocated / usable
  • the live launch jobs visible through the caller's receiver-selected session, including process state and accumulated user-plus-system CPU nanoseconds
  • whether an independently delegated exact job-control handle is available for a displayed row

Numeric session, job, process, generation, cursor, and slot values are data. They never create or select authority.

Clean-Room Policy

  • Do not copy external source code or documentation.
  • Do not add external Rust crates.
  • Keep implementation, protocol fixtures, and test inputs independently reviewable within EriX.

License

Licensed under the ISC License.

Runtime Authority

The complete child CSpace is validated before I/O. Its only fixed external capabilities are exact send-only endpoints for:

  • TTY session lifecycle
  • standard input, output, and error
  • the current job's launchd accounting route, upgraded to session inspection only by the exact command-manifest/TTY/script-policy intersection

Optional process control is represented only by exact send-only job-control handles explicitly delegated for this invocation. Each --control=JOB:GEN argument is a non-authoritative reconciliation claim: extop enables that handle only after an identity read through the handle itself reports the same job and generation, and later requires the selected process row's session to match.

Extop admits no cwd, resolver, public launch, loaderd, dynlinkd, procd, memd, kernel-control, block, device, key, global VFS, endpoint-factory, or service- discovery authority. If the session snapshot is unavailable, there is no privileged fallback.

Interaction

  • --samples=N: render exactly N refreshes and exit successfully; this authority-free bounded mode is intended for capture and integration checks
  • q: exit
  • r: request an immediate refresh
  • Up/Down or k/j: move selection
  • i: interrupt through the selected row's explicit handle
  • s: request stop through the selected row's explicit handle
  • c: request continue through the selected row's explicit handle
  • t: terminate through the selected row's explicit handle

Resize and mode events cause dimensions to be read again from the exact TTY lifecycle route. Hangup exits cleanly; terminal interrupt exits with status 130. Disappearing jobs are removed only after a complete cursor enumeration, and selection is repaired by exact job generation.

Capacity and Backpressure

Processor, process, and optional-control arrays come from a package-patched, page-aligned writable workspace. The runtime imposes no hidden record ceiling; volatile reads preserve the patched words against build-time constant folding, and insufficient deployment capacity is an explicit startup or refresh failure. Rendering assembles each clipped line in bounded stack storage and submits that line through one exact-stdout write, then follows receiver progress without truncating retained state. This keeps concurrent kernel diagnostics from splitting the dashboard's line-level serial evidence at scheduler boundaries.

Packaging

manifests/extop-v1.txt is the repository-owned catalog for /bin/extop. Its manifest ceiling contains a non-interactive exact session inspection row and a separate interactive process-control ceiling. The executable must remain absent from boot.img.

The release ELF carries an ERIXTOPCAPLAY001 record. Image construction patches its workspace byte length and processor/process/control capacities before the runtime graph, executable content, and command-entry manifest are hashed. Runtime reads those authenticated post-link words through volatile accesses before validating or using the workspace.

The focused positive VM scenario boots two processors and runs extop --samples=2 through ext4 exsh, requiring two ordered dashboards, both processor rows, nonzero allocator use, and a live session process row. Its bootstrap session carries only inspection authority. The paired negative keeps the session deny-all, supplies a forged numeric job claim, requires launch denial, and forbids dashboard output. Both scenarios live in the integration repository and run during the current regression-validation pass.

Target fail-stop statuses distinguish panic (0xE0), raw startup entry rejection (0xE1), the reserved former aggregate runtime code (0xE2), authenticated startup image, command, argument, description, control-slot, and CSpace rejection (0xE30xE8), and packaged capacity, control-capacity, or workspace rejection (0xE90xEB). Live failures use 0xEC0xF6 for control initialization, stream initialization, terminal state, metrics, processes, rendering, sample counting, events, input, and control. Metrics failures are further separated as transport, capacity, sample, or cross-processor mismatch at 0xF7 and 0xF90xFB. A rejected metrics reply mirrors canonical IPC results one through eight as 0xD10xD8 and uses 0xDF for an unknown result. The former aggregate rejection result 0xF8 remains reserved. These values are diagnostic process results only; they grant no authority and do not permit recovery through a broader route.

Development Model

cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-targets --all-features
cargo doc --no-deps --all-features
cargo check --lib --bin extop --target x86_64-unknown-none --all-features
RUSTFLAGS='-D warnings -C link-arg=-Tlinker.ld' \
  cargo build --release --bin extop --target x86_64-unknown-none \
  --features extop-runtime

Git dependencies use full 40-character commit rev pins. Integration source revisions and CI caches preserve those identities without branch-head or synthetic-commit substitution. No third-party crates are used.

Governance Principles

  • Runtime authority must remain limited to authenticated session inspection and independently delegated exact job-control handles.
  • Numeric process and job claims remain descriptive and cannot select a target.
  • Protocol or authority changes update direct consumers, focused tests, and system documentation together.
  • Non-obvious authority or lifecycle changes require documented rationale.

Contact

Development occurs in the EriX organization. Maintainers can be reached at admin@erikinkinen.fi.