Automattic / Automattic/kandelo
packages: replace simulated posix-utils-lite applets with real implementations
- 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