Skip to content
This repository was archived by the owner on Jul 21, 2026. It is now read-only.

findutils: add traversal and process execution tools - #23

Merged
brandonpayton merged 1 commit into
mainfrom
migrate/findutils-cli
Jul 17, 2026
Merged

findutils: add traversal and process execution tools#23
brandonpayton merged 1 commit into
mainfrom
migrate/findutils-cli

Conversation

@brandonpayton

@brandonpayton brandonpayton commented Jul 11, 2026

Copy link
Copy Markdown
Member

Why

Kandelo users and package scripts need find to traverse files and xargs to run commands over those results. These standard Unix workflows should come from a first-class Homebrew Formula and exercise Kandelo's normal filesystem, fork, exec, and shell paths instead of relying on a registry artifact or checkout-local helper.

What changed

  • Build GNU Findutils 4.10.0 from its verified official source through the Kandelo SDK, configure, and sysroot path.
  • Install the intentionally narrow find and xargs executable surface plus their manual and Info documentation.
  • Apply and validate complete fork continuation instrumentation for both executables because both import kernel_fork.
  • Declare Binaryen and WABT as native build tools and Dash as a test-only Formula; there are no target runtime Formula dependencies.
  • Stage Dash explicitly as guest /bin/sh for process tests instead of resolving a checkout-local command.
  • Exercise traversal, predicates, -printf, missing-root failure, two real find -exec children, and two real xargs child batches.

The Formula uses the narrow upstream install rules so the validated instrumented executables and the four declared manuals are installed together. This PR contains no bottle block, archive, sidecar, receipt, provenance metadata, generated Wasm artifact, platform change, or Kandelo ABI change.

Exact source state

  • Tap base: 12775ddb6ac0c343415ec568dc45d137925bac59
  • Exact PR head: 92cf66a87a47b0f6a11da775e61b1598291c4ab8
  • Exact PR tree: 432152eb659e6628a6db39e1e849ff4f29a996a9
  • Formula SHA-256: 59dc7e9eaeb0533a6583545bb839c07c947cedd95332badc8cc1bbe6ac989361
  • Formula blob, unchanged from the previously reviewed PR: 49984ff6cceda79b7fb314882c0a1574d9db8fcc
  • Formula-only stable patch ID, unchanged: 311934599c62caf17d4d61018954c5b879b139bf
  • Target runtime dependency closure: empty
  • Dash is test-only and is already present on tap main

The old six-commit review history was folded into one purpose-led Formula commit for the current-main restack. The Formula bytes are unchanged; the full cumulative patch ID differs only because the README insertion context moved as the tap inventory grew.

Historical runtime evidence

These exact Formula bytes were previously source-built twice and fully Formula-tested on Kandelo ABI 18. The two builds were byte-identical, both artifacts carried complete fork instrumentation without retired Asyncify names, and the full test exercised the real Dash-backed child workflows with two descendants each.

That evidence identified and fixed two real Formula problems before this restack: manual copies that omitted documentation, and tests that accidentally resolved a checkout-local command.

ABI 18 artifacts are historical evidence only. They must not be published or treated as ABI 41 proof. The trusted publisher must rebuild from this exact merged Formula against the current ABI 41 platform before any bottle, pour, VFS, Node.js, or Chromium acceptance claim.

Fresh source validation

  • Current tap trust checks passed locally.
  • Ruby syntax passed.
  • The canonical source-closure validator accepted the exact head.
  • Formula support passed: 48 tests / 380 assertions.
  • TypeScript runner support passed: 15 / 15 tests.
  • Runtime dependency parsing returned an empty target closure.
  • git diff --check passed.
  • Independent review accepted the source Formula after verifying the upstream archive, narrow install surface, empty target runtime closure, fork instrumentation, real child tests, and historical-evidence limits.

Scope and remaining gates

All old platform dependency PR gates have been absorbed into merged Kandelo platform batch #967. This PR is now a source Formula review only.

It does not claim a current ABI 41 build, public bottle, GHCR readback, stock Homebrew pour, composed VFS image, in-guest install, or browser result. Those remain post-#968 publisher gates.

@brandonpayton

Copy link
Copy Markdown
Member Author

Independent devil's-advocate review completed against head 54f33b1; no formula changes were required.

Reviewed source/hash/license, registry output scope, dependency declarations, configure cache ownership, fork instrumentation, literal Homebrew test, and exact Chromium bytes. Both artifacts import kernel_fork, export the five continuation functions, and have no Asyncify surface.

The initial browser hang was not masked: the staged flat coreutils.wasm was SHA-identical to sh.wasm, so the child named echo entered the shell stdin loop. Revalidation with #878's real Coreutils 9.6 artifact passed xargs and find -exec; #875 kept the expected missing-path error free of host diagnostics.

Merge/bottle gates in the PR body remain authoritative.

@brandonpayton
brandonpayton force-pushed the migrate/findutils-cli branch 4 times, most recently from efc754b to b565c25 Compare July 12, 2026 03:38
@brandonpayton

Copy link
Copy Markdown
Member Author

Exact-head update after tap #70

This branch is now based directly on tap main 36df17ec5395fb4531fddc2d9ab769eb1e6c19ca and uses the merged fail-closed Wasm artifact validator. Current head: b565c25a7daa402f3a725540770aaa11c43dcef9.

Formula/findutils.rb blob 366f9670, SHA-256 966252f9...21af6737.

Through Kandelo's dev shell, the combined eight-formula syntax/style pass is clean, the merged support suite passes 29/216, and branch diff checks pass. A fresh exact-head devil review is still required.

This supersedes the older restack head/base/hash paragraph in the PR body. Source materialization remains gated on Automattic/kandelo#882; no bottle, sidecar, receipt, provenance, or poured-install claim is made by this update.

@brandonpayton

Copy link
Copy Markdown
Member Author

Independent devil review: ACCEPT at corrected exact head 91ac61e95ed1538b39c2c61ff2bc2946f12e5588 on base 36df17ec5395fb4531fddc2d9ab769eb1e6c19ca.

The correction implements the proven narrow install exactly: each temporary instrumented output is validated with fork: :required, moved byte-for-byte over the upstream link target, and installed only through the find, xargs, and doc subdirectory rules. Prior exact ABI 18 integration proved those rules preserve both validated executable hashes, install find.1, xargs.1, find.info, and find-maint.info, and do not install locate, updatedb, or frcode. The current test asserts all four documents.

Fresh exact-head checks through scripts/dev-shell.sh: Ruby syntax/load, Homebrew style, 29 support tests / 216 assertions, and diff check pass. Formula hash, PR metadata, source-only scope, clean worktree, and exact merge tree all match the PR body.

Accepted for source merge once Automattic/kandelo#882 lands. Bottle and pour gates remain separate; no publication claim is made.

@brandonpayton
brandonpayton force-pushed the migrate/findutils-cli branch from 91ac61e to 18294e6 Compare July 12, 2026 08:53
@brandonpayton

Copy link
Copy Markdown
Member Author

Exact-head devil review after the history-only restack: APPROVE for source merge after Automattic/kandelo#882 at 18294e6656ef424442db819dc32fcf8dda8f6ae3.

The Formula blob is exactly 4f064a56073a3d005563c95a73ca03817d06a470, byte-identical to accepted corrected head 91ac61e95ed1538b39c2c61ff2bc2946f12e5588; Formula SHA-256 is 00172f185fc85bf60063356ef8755b8abbe81b09dec6a500bcc7aba60317fd10. Fresh exact-head checks: Homebrew style inspected 1 file with no offenses, Ruby syntax and git diff --check pass, and the worktree is clean. Its shared validator/support blobs match the just-executed 30-run / 221-assertion suite.

The narrow install remains correct: only real find and xargs plus their four upstream manuals, both fork-instrumented and fail-closed validated; locate-family tools are not implied. Real child execution remains covered, with base echo correctly treated as platform runtime. This approves source only; exact merged-head bottles, pours, and runtime provenance remain separate gates.

@brandonpayton
brandonpayton force-pushed the migrate/findutils-cli branch from 18294e6 to 3e810fb Compare July 12, 2026 17:30
@brandonpayton

Copy link
Copy Markdown
Member Author

Independent history-only restack review: APPROVE exact head 3e810fb. Formula blob and SHA-256 remain byte-identical to the accepted candidate; the README delta is only the Findutils row; exact syntax, diff, and style checks pass. Source merge correctly remains gated on Automattic/kandelo#874 and #882; forked bottle publication also retains #888 and the stated Node/Chromium proofs.

@brandonpayton
brandonpayton force-pushed the migrate/findutils-cli branch from 3e810fb to 361688f Compare July 12, 2026 19:36
@brandonpayton

Copy link
Copy Markdown
Member Author

Exact-head devil review: APPROVE 361688f079ecdc017d4eb9ade686bb802429062e on 74bdddd6729f595048c889ab9a536e06f86b9d93. The clean declared-closure test now proves real Dash children for find and xargs; source, install surface, fork/ABI contracts, and exact-#888 repeat bytes are clean. Source gates are #874, #882, #883, and #888 on #889; #903 is not a gate. Final bottle publication still requires the selected final ABI, dependency-first Dash availability, trusted publisher evidence, and stock Node/Chromium pours.

@brandonpayton
brandonpayton force-pushed the migrate/findutils-cli branch from 361688f to 5f2cbc3 Compare July 13, 2026 00:03
@brandonpayton

Copy link
Copy Markdown
Member Author

Independent exact-head review completed for 5f2cbc33bdf8fe7c040cc30b9a60a0fa7435bba0: ACCEPT.

  • All six commits range-diff identically from the previously accepted series onto tap main c5705667a90b05754d2244a362f3f7fc95d2f9c3.
  • A fresh literal brew test passed with source-built Dash and both two-child process gates.
  • Two source builds were byte-identical; both outputs are ABI 18, fork-required with complete continuation metadata, and free of Asyncify and host paths.
  • Support passed 37/279; Node rootfs passed 5/5; style, strict audit, readall, direct-dependency, diff, and clean-worktree gates passed.
  • PR metadata now adds #873 and accurately excludes #903/#905.

No formula blocker was found. Publication remains gated on the consolidated ABI and trusted post-merge bottle rebuild/pours.

@brandonpayton
brandonpayton force-pushed the migrate/findutils-cli branch from 5f2cbc3 to 22a7460 Compare July 17, 2026 05:01
Kandelo users and package scripts need first-class find and xargs commands for filesystem traversal and process-driven workflows through the normal kernel path. Add the upstream GNU Findutils formula with a narrow documented install surface, required fork instrumentation, explicit Dash test closure, and real child-process tests.
@brandonpayton
brandonpayton force-pushed the migrate/findutils-cli branch from 22a7460 to 92cf66a Compare July 17, 2026 05:04
@brandonpayton
brandonpayton merged commit 1b4a07b into main Jul 17, 2026
2 checks passed
@brandonpayton
brandonpayton deleted the migrate/findutils-cli branch July 17, 2026 05:05
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant