Automattic / Automattic/kandelo

packages: replace simulated posix-utils-lite applets with real implementations

Open
#898 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
31
Forks
15
Avg merge
11h 7m
Merged PRs (30d)
80

Description

## Contract

Registry packages are first-class software inputs, not demo facades. The current `posix-utils-lite` ABI 18 artifact validates structurally, but every non-colliding applet is behaviorally false or incomplete. Publishing it as a Homebrew formula would misrepresent standard command behavior and violate the package/POSIX contract.

## Evidence

Built unchanged from current main through `scripts/dev-shell.sh`:

- artifact: 91,586 bytes
- SHA-256: `1a991710452a9c9d3858a0e8f007195be9944b83efd8d589d32634ba95c3861b`
- ABI: 18
- `wasm-validate --enable-all`: pass
- no Asyncify, `kernel_fork`, `wpk_fork_*`, or embedded host paths

Focused Node probes then showed false command semantics:

- `compress` copies input instead of producing LZW `.Z`; `uncompress` is the same byte copier.
- `patch` prints `patching file` but does not modify the file.
- `msgfmt` writes annotated PO text instead of GNU MO bytes; gettext tools do no catalog lookup.
- `logger` writes stdout rather than the system log and ignores priority/stdin behavior.
- `ipcs` prints a static table; `ipcrm` reports IPC unavailable despite working Kandelo SysV IPC.
- `ps -p 99999` ignores the selector and lists processes.
- `uuencode` always emits base64 even without `-m`; historical `uudecode` input is decoded as base64.
- `asa`, `cal`, `fuser`, `getconf`, `locale`, `renice`, and `what` fail focused option/semantic checks.
- `cflow`, `ctags`, `cxref`, `gencat`, `iconv`, `lex`, `man`, `more`, `pax`, `xgettext`, and `yacc` are scanners, byte copies, `cat`, or private-format/stub generators rather than the named utilities.

The source remains the same demo-era payload used by the legacy formula (`e032c0e06db0035b106de0c400db5007e84037d405b6632955f1e45bfd3e1f93`).

## Ownership split

Remove overlapping outputs in favor of real packages:

- `ar`, `nm`, `strings`, `strip`: GNU binutils
- `ed`: GNU ed
- `ex`: Vim
- `patch`: GNU patch

Port real upstream owners for the remaining portable tools:

- GNU cflow
- ncompress
- Universal Ctags / cxref
- GNU gettext (`gettext`, `ngettext`, `msgfmt`, `xgettext`)
- libiconv utility
- flex and byacc/bison
- man-db / a real pager
- paxutils or libarchive

The Kandelo-owned residual set is `asa cal fuser getconf ipcrm ipcs locale logger ps renice uudecode uuencode what`. Each needs a standalone implementation fix with behavioral tests, or the registry output should be retired in favor of a real upstream package.

## Acceptance

- No package script or formula simulates successful standard-command behavior.
- Each retained output has focused positive, negative, option, status, and byte-format tests through `NodeKernelHost`; browser coverage is added where host behavior can diverge.
- Registry outputs/rootfs mappings stop selecting lite applets once their real package owner exists.
- Rebuild the corrected package artifact for the current ABI and validate it through the shared Wasm artifact contract.
- Add Homebrew formulae only for corrected, non-overlapping packages; bottle acceptance must pour the resulting Homebrew bottles in Node and Chromium.

This package-source cleanup does not appear to require an ABI change, but corrected artifacts must be rebuilt and published through the normal package pipeline.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with scripts/dev-shell.sh and inspect the registry outputs and rootfs mappings that select posix-utils-lite. Use the focused NodeKernelHost probes and the shared Wasm artifact contract to establish current behavior. Done means retained applets have real implementations and positive, negative, option, status, and byte-format tests, with corrected artifacts rebuilt for the current ABI.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js, typescript, wasm
Domain
build-system, operating-systems, testing, tooling
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.