[PR #3761] [CLOSED] docs(firmware): disclose procps ps prerequisite #5880

Closed
opened 2026-10-31 01:10:08 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/3761
Author: @xiajiahang
Created: 10/14/2026
Status: ❌ Closed

Base: main ← Head: docs/firmware-procps-requirement


📝 Commits (2)

  • 3a1a463 docs(firmware): disclose procps ps prerequisite
  • 289955f Merge remote-tracking branch 'origin/main' into followup/3761-ci

📊 Changes

3 files changed (+5 additions, -3 deletions)

View changed files

📝 docs/firmware-analysis.md (+2 -0)
📝 src/application/CapabilityInventory.ts (+1 -1)
📝 src/contracts/firmware/firmwareToolContracts.ts (+2 -2)

📄 Description

Summary

Fixes #3757. Advertise the existing Linux procps-compatible ps prerequisite in both firmware tool descriptions and unavailable-capability remediation, with guidance for minimal containers.

Problem and expected behavior

Installing Binwalk/Unblob and util-linux prlimit alone is insufficient on a slim Linux image without ps. Tool descriptions should disclose the prerequisite before the caller attempts a request.

Change and scope

Update the owning firmware contracts and capability inventory text; supplement the existing firmware guide. Maintainer scope decision: not applicable, documentation of existing process supervision only. Doctor checks requested in #3758 remain a separate contribution.

Contract and boundary impact

  • Semantic owner and earliest changed stage: firmware tool descriptions and capability remediation.

  • Contribution scope fit and linked maintainer decision: routine documentation correction within existing boundaries.

  • CLI and MCP/tool-catalog contract: descriptions/remediation only; inputs, outputs and runtime behavior unchanged.

  • Provider, bridge, target-format, or platform compatibility: unchanged.

  • Evidence, artifact, provenance, or reconstruction contract: unchanged.

  • Target selection, authority, upstream behavior, and cleanup details: unchanged.

  • Generated metadata, package, or installation impact: generated documentation checks required; no installer or dependency changes.

  • Documentation or usability only; no target interaction.

Evidence and regression coverage

  • Tests added or updated: none; text-only correction verified through existing documentation and static checks.
  • Source-derived evidence: FirmwareCommand uses spawnOwnedProviderProcess; Linux ProcessOwnershipObservation.prepare probes ps and refuses before child launch when unavailable. Installation and firmware guides already document this prerequisite; two tool contracts and the capability remediation omitted it.
  • User-visible output: both firmware descriptions now name a procps-compatible ps on REA's PATH; remediation lists it alongside util-linux prlimit.
  • Remaining proof gaps: no Linux container reproduction or real Binwalk/Unblob execution performed for this documentation change.

Validation performed

  • npm run docs:check — passed, including generated metadata/documentation consistency, license checks and 5 README consistency tests.
  • npm run check — passed: 6 static tasks and architecture guards. Repository lint warnings remain nonblocking.
  • git diff --check — passed.
  • Independent read-only review — no actionable findings; source review only.

CI follow-up (2026-10-16)

The original CI run 38653949860 failed because clientProfileLifecycle.test.ts exceeded 30 seconds in the selected-client lifecycle case, in both the shard and portable lanes. Firmware wording assertions were not the failure. This does not establish that the timeout was transient.

Merged upstream main at d72d856f5 without rewriting history. It includes maintainer commit 85788452d, which batches redundant setup dry runs while retaining per-client assertions. No timeout, retry, or test assertion was changed by this PR. Relative to the refreshed base the contribution remains the original three wording-only files (+5/-3).

Executed on macOS arm64 with Node 24.18.0 / npm 11.16.0:

  • npm ci --offline --no-audit — passed after the dependency check identified the upstream tsx addition; lockfile unchanged.
  • npm run test:focused -- tests/boundary/cli/clientProfileLifecycle.test.ts src/application/CapabilityInventory.test.ts tests/boundary/mcp/firmwareMcp.test.ts tests/boundary/mcp/toolSchemaValidity.test.ts tests/boundary/mcp/contractPresentation.test.ts tests/boundary/filesystem/productCatalog.test.ts tests/boundary/filesystem/documentationFacts.test.ts — 59 passed, 1 skipped. The Linux-only firmware MCP execution test was skipped on macOS. Client lifecycle file: all 5 passed; the previously failing case took about 10.4 seconds in this run.
  • npm run check — passed, six Turbo tasks and architecture guards across 1455 sources; repository-wide nonblocking lint warnings remain.
  • npm run docs:check — passed, including five README consistency tests.
  • git diff origin/main --check — passed.

One local pass is not a controlled performance comparison or proof of the original CI root cause. The new remote revision still needs CI confirmation. No real Binwalk/Unblob or Linux container missing ps was exercised locally.

Compatibility, safety, and release

  • Breaking changes or migration steps: none. Minimal Linux images must supply the existing prerequisite through procps/procps-ng or a compatible ps on PATH.
  • Real Hopper/Ghidra, browser, or OS coverage: checks ran on macOS arm64; no real firmware engine verification claimed.
  • Package or release metadata impact: no version or dependency change.
  • Security, privacy, process, or containment review: documentation only; no new execution authority.

Author readiness

Human owner: @xiajiahang

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/3761 **Author:** [@xiajiahang](https://github.com/xiajiahang) **Created:** 10/14/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `docs/firmware-procps-requirement` --- ### 📝 Commits (2) - [`3a1a463`](https://github.com/morluto/rea/commit/3a1a463ac36112105b04cb63ff91364af0a77f80) docs(firmware): disclose procps ps prerequisite - [`289955f`](https://github.com/morluto/rea/commit/289955f20df045530c4bd4d3c81c3fe6a05b2429) Merge remote-tracking branch 'origin/main' into followup/3761-ci ### 📊 Changes **3 files changed** (+5 additions, -3 deletions) <details> <summary>View changed files</summary> 📝 `docs/firmware-analysis.md` (+2 -0) 📝 `src/application/CapabilityInventory.ts` (+1 -1) 📝 `src/contracts/firmware/firmwareToolContracts.ts` (+2 -2) </details> ### 📄 Description ## Summary Fixes #3757. Advertise the existing Linux procps-compatible `ps` prerequisite in both firmware tool descriptions and unavailable-capability remediation, with guidance for minimal containers. ## Problem and expected behavior Installing Binwalk/Unblob and util-linux `prlimit` alone is insufficient on a slim Linux image without `ps`. Tool descriptions should disclose the prerequisite before the caller attempts a request. ## Change and scope Update the owning firmware contracts and capability inventory text; supplement the existing firmware guide. Maintainer scope decision: not applicable, documentation of existing process supervision only. Doctor checks requested in #3758 remain a separate contribution. ## Contract and boundary impact - Semantic owner and earliest changed stage: firmware tool descriptions and capability remediation. - Contribution scope fit and linked maintainer decision: routine documentation correction within existing boundaries. - CLI and MCP/tool-catalog contract: descriptions/remediation only; inputs, outputs and runtime behavior unchanged. - Provider, bridge, target-format, or platform compatibility: unchanged. - Evidence, artifact, provenance, or reconstruction contract: unchanged. - Target selection, authority, upstream behavior, and cleanup details: unchanged. - Generated metadata, package, or installation impact: generated documentation checks required; no installer or dependency changes. - [x] Documentation or usability only; no target interaction. ## Evidence and regression coverage - Tests added or updated: none; text-only correction verified through existing documentation and static checks. - Source-derived evidence: FirmwareCommand uses spawnOwnedProviderProcess; Linux ProcessOwnershipObservation.prepare probes ps and refuses before child launch when unavailable. Installation and firmware guides already document this prerequisite; two tool contracts and the capability remediation omitted it. - User-visible output: both firmware descriptions now name a procps-compatible ps on REA's PATH; remediation lists it alongside util-linux prlimit. - Remaining proof gaps: no Linux container reproduction or real Binwalk/Unblob execution performed for this documentation change. ## Validation performed - `npm run docs:check` — passed, including generated metadata/documentation consistency, license checks and 5 README consistency tests. - `npm run check` — passed: 6 static tasks and architecture guards. Repository lint warnings remain nonblocking. - `git diff --check` — passed. - Independent read-only review — no actionable findings; source review only. ## CI follow-up (2026-10-16) The original CI run [38653949860](https://github.com/morluto/rea/actions/runs/38653949860) failed because `clientProfileLifecycle.test.ts` exceeded 30 seconds in the selected-client lifecycle case, in both the shard and portable lanes. Firmware wording assertions were not the failure. This does not establish that the timeout was transient. Merged upstream `main` at `d72d856f5` without rewriting history. It includes maintainer commit `85788452d`, which batches redundant setup dry runs while retaining per-client assertions. No timeout, retry, or test assertion was changed by this PR. Relative to the refreshed base the contribution remains the original three wording-only files (+5/-3). Executed on macOS arm64 with Node 24.18.0 / npm 11.16.0: - `npm ci --offline --no-audit` — passed after the dependency check identified the upstream `tsx` addition; lockfile unchanged. - `npm run test:focused -- tests/boundary/cli/clientProfileLifecycle.test.ts src/application/CapabilityInventory.test.ts tests/boundary/mcp/firmwareMcp.test.ts tests/boundary/mcp/toolSchemaValidity.test.ts tests/boundary/mcp/contractPresentation.test.ts tests/boundary/filesystem/productCatalog.test.ts tests/boundary/filesystem/documentationFacts.test.ts` — 59 passed, 1 skipped. The Linux-only firmware MCP execution test was skipped on macOS. Client lifecycle file: all 5 passed; the previously failing case took about 10.4 seconds in this run. - `npm run check` — passed, six Turbo tasks and architecture guards across 1455 sources; repository-wide nonblocking lint warnings remain. - `npm run docs:check` — passed, including five README consistency tests. - `git diff origin/main --check` — passed. One local pass is not a controlled performance comparison or proof of the original CI root cause. The new remote revision still needs CI confirmation. No real Binwalk/Unblob or Linux container missing `ps` was exercised locally. ## Compatibility, safety, and release - Breaking changes or migration steps: none. Minimal Linux images must supply the existing prerequisite through procps/procps-ng or a compatible ps on PATH. - Real Hopper/Ghidra, browser, or OS coverage: checks ran on macOS arm64; no real firmware engine verification claimed. - Package or release metadata impact: no version or dependency change. - Security, privacy, process, or containment review: documentation only; no new execution authority. ## Author readiness Human owner: @xiajiahang - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [ ] This PR addresses a concrete problem or an agreed enhancement. - [ ] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [ ] The PR has one focused outcome and the title follows type(scope): outcome. - [ ] Related issue is linked. - [ ] Owning docs, contracts, and generated metadata are updated where needed. - [ ] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 01:10:08 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#5880
No description provided.