Manifests Lack Output Field Schemas, Breaking Pipeline Autocomplete #4

Closed
opened 2026-03-17 23:09:28 -06:00 by jorge · 0 comments
Owner

Programs explicitly declare their overarching output format (e.g., output = "record_list") in their manifests, but they do not formally declare the specific fields contained within those records. Consequently, they also cannot declare what structured data they accept from stdin.

For devs:
If a user types list /home/user | where <TAB>, how does the shell know to autocomplete specific fields like size, kind, or modified?

For the shell to provide context-aware autocomplete inside pipeline expressions (like the expression type used by the where command), it needs to know the exact schema of the records flowing through the pipe. While the terminal knows list outputs a record_list, it does not know the actual data fields of that list at parse time unless the manifest formally defines them. Without an output field schema matching an input requirement, true type safety and context-aware completion between piped programs are impossible, deferring all type-checking to runtime.

For users:
The pipeline is the primary interface in ZerOS. If users cannot tab-complete field names when piping list into where or sort, the ergonomic advantage of passing structured data is severely diminished.

Test Examples

  1. list /home | where <TAB> (Should suggest name, size, kind, modified, etc.)
  2. process | sort <TAB> (Should suggest pid, cpu, memory, etc.)
  3. system | slice <TAB> (Should suggest os, version, kernel, etc.)
Programs explicitly declare their overarching output format (e.g., `output = "record_list"`) in their manifests, but they do not formally declare the specific fields contained within those records. Consequently, they also cannot declare what structured data they accept from `stdin`. **For devs:** If a user types `list /home/user | where <TAB>`, how does the shell know to autocomplete specific fields like `size`, `kind`, or `modified`? For the shell to provide context-aware autocomplete inside pipeline expressions (like the `expression` type used by the `where` command), it needs to know the exact schema of the records flowing through the pipe. While the terminal knows `list` outputs a `record_list`, it does not know the actual *data fields* of that list at parse time unless the manifest formally defines them. Without an output field schema matching an input requirement, true type safety and context-aware completion between piped programs are impossible, deferring all type-checking to runtime. **For users:** The pipeline is the primary interface in ZerOS. If users cannot tab-complete field names when piping `list` into `where` or `sort`, the ergonomic advantage of passing structured data is severely diminished. ## Test Examples 1. `list /home | where <TAB>` (Should suggest `name`, `size`, `kind`, `modified`, etc.) 2. `process | sort <TAB>` (Should suggest `pid`, `cpu`, `memory`, etc.) 3. `system | slice <TAB>` (Should suggest `os`, `version`, `kernel`, etc.)
jorge self-assigned this 2026-03-17 23:09:28 -06:00
jorge closed this issue 2026-03-18 13:45:29 -06:00
Sign in to join this conversation.
No labels
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
zero/ZerOS#4
No description provided.