# Subplan 01 - sx Language And Standard Library

> **Status (2026-06-11):** largely superseded by sx itself. Slice 1 shipped
> as-built with a different design — there is no `pub`; aliases are the
> re-export mechanism and `modules/std.sx` is the barrel. Slice 2 is settled
> (`!` error channel, `catch (e)` bindings). Slices 5–7 partially shipped
> (`std.fs`, `std.process`, `std.hash` SHA-256, `std.json`, `std.cli`,
> `std.log`). Still open: Unicode/String model (Slice 3),
> HashMap/StringBuilder (Slice 4), bytes/paths (Slice 5 remainder),
> time/random/encoding (Slice 6 remainder), config (Slice 7 remainder), and
> HTTP/TLS/SQLite/archive/testing helpers (Slice 8). See "sx Foundation
> Status" in `PLAN.md`.

## Goal

Build the language and std primitives required before the distribution platform
can be implemented cleanly in sx.

## Work Location

- Primary repo: `/Users/agra/projects/sx`
- Planning repo: `/Users/agra/projects/distribution`

## Prerequisites

- Read `/Users/agra/projects/sx/readme.md`
- Read `/Users/agra/projects/sx/specs.md`
- Read `/Users/agra/projects/sx/docs/error-handling.md`
- Re-read `PLAN.md` sections:
  - `Phase 0 - sx Language and Module Prerequisites`
  - `Standard Library API Surface`
  - `Detailed Std Struct And Method Sketches`

## Slice 1 - Public Exports And Namespace Aliases

Deliver:

- Add `pub` declarations for public module members.
- Add public namespace member re-export aliases:
  - `pub print :: core.print`
  - `pub format :: core.format`
- Support alias imports without forcing every caller to know the source module.
- Add parser, AST, resolver, and compiler tests.
- Add examples for module barrels such as `std.sx`.

Acceptance:

- Private module members are not importable outside their namespace.
- Re-exported members keep correct identity for diagnostics and docs.
- Cycles and duplicate public names produce clear errors.

## Slice 2 - Error Handling Alignment

Deliver:

- Audit all proposed std signatures against sx error handling.
- Replace any incorrect `!T` assumptions with the actual sx shape.
- Add tests that show success and error return forms.

Acceptance:

- New std APIs follow the actual sx error model.
- Distribution platform examples compile with the same error style.

## Slice 3 - Unicode And String Model

Deliver:

- Define `String` as validated UTF-8 bytes.
- Define explicit terms:
  - byte length
  - Unicode scalar value
  - grapheme cluster
  - code point index is not a random-access string index
- Add `std.unicode` primitives for validation, scalar iteration,
  normalization policy, case mapping policy, and ASCII fast paths.
- Add `StringBuilder` for efficient construction.

Acceptance:

- Invalid UTF-8 cannot silently become `String`.
- APIs that operate on bytes, scalars, and display width are named distinctly.
- Platform identifiers and paths do not accidentally use display width logic.

## Slice 4 - Collections

Deliver:

- Extend `List` with reserve, resize, insert, remove, pop, clear, sort, find,
  contains, map/filter style helpers where idiomatic.
- Add `HashMap` with deterministic iteration option or clear documentation that
  order is unspecified.
- Add hash/equality hooks for custom key types.
- Add tests for resize, collisions, deletion, and iteration.

Acceptance:

- Manifest parsing, route tables, and in-memory product stores can be written
  without ad hoc arrays.

## Slice 5 - Bytes, Paths, FS, And Process

Deliver:

- `std.bytes` for slices, builders, compare, copy, starts_with, ends_with.
- `std.path` with platform-aware join, normalize, basename, dirname, extension.
- `std.fs` with open/read/write/stat/mkdir/rename/remove/temp_dir/walk.
- `std.process` with args, env, cwd, exit, spawn, wait, stdout/stderr capture.

Acceptance:

- A CLI can read a manifest, inspect files, spawn validation helpers, and write
  artifacts safely.

## Slice 6 - Time, Random, Hashing, Encoding

Deliver:

- `std.time` timestamps, durations, monotonic clock, RFC3339 parse/format.
- `std.random` secure bytes and deterministic PRNG for tests.
- `std.hash` SHA-256 streaming.
- `std.encoding` hex, base64url, percent encoding.

Acceptance:

- Release ids, token hashes, artifact digests, and audit timestamps can be
  implemented without platform-specific shims.

## Slice 7 - JSON, Config, CLI, And Logging

Deliver:

- `std.json` parser/writer with useful typed access.
- `std.config` for env/file/CLI config layering.
- `std.cli` parser with subcommands, flags, help, exit codes.
- `std.log` structured events and levels.

Acceptance:

- `dist ci publish --manifest dist.json --json` can parse args and emit stable
  JSON output.

## Slice 8 - HTTP, TLS, SQLite, Archive, Testing

Deliver:

- `std.http` server/client basics.
- `std.tls` client/server wiring or explicit temporary boundary.
- `std.db.sqlite` minimal prepared statements and transactions.
- `std.archive` zip/tar/gzip reading needed for artifacts.
- `std.testing` assertions, fixtures, temp directories, golden files.

Acceptance:

- `distd` can expose endpoints, persist releases, inspect artifacts, and run
  repeatable tests.

## Checkpoint Notes

After each slice, update:

- `.agents/CHECKPOINT.md`
- `.agents/checkpoint.json`
- Any changed API signatures in `PLAN.md`
