Promote v0.1.0 to main #3

Merged
binjovi-bot merged 5 commits from trunk into main 2026-09-14 16:52:01 +00:00
Collaborator
No description provided.
feat: the sourcerer skeleton on the zelnet package
All checks were successful
binjovi/ci Binjovi completed the frozen plan
5b111ff387
sourcerer is the IBM i source-control CLI. This first commit is the
repository skeleton that Binjovi can build and release:

- build.zig links sean/zelnet as a Zig package. build.zig.zon pins the
  v0.10.18 tarball by URL and content hash, and build.zig passes the
  same tag into the dependency so `zelnet.version` reports the linked
  release rather than zelnet's committed dev version. The two pins must
  move together; tests/cli/contract.sh checks that they agree.
- `sourcerer --version` prints `sourcerer v0.1.0 (zelnet v0.10.18)` on
  stdout and nothing on stderr. `--help` prints the planned verbs. Every
  planned verb exits 2 until it exists, so a script cannot mistake a
  missing verb for success. No arguments and unknown arguments exit 2.
- src/cli.zig is pure argument parsing with offline tests. src/root.zig
  is the library root; src/main.zig is the only file that ends the
  process. The exit codes are the contract: 0 done, 1 failed, 2 invalid
  input, 3 refused by a gate.
- `zig build check` is CI parity: zig fmt --check, the unit tests, the
  --version and --help stdout contracts, the invalid-argument contracts
  and tests/cli/contract.sh (bash, no host, no credentials).
- ci/binjovi-package.sh carries the Binjovi package contract that zelnet
  uses, without the macOS SDK (no GUI), for the later packaging release.
  packaging/nfpm.yaml, Makefile, AGENTS.md, STYLE.md, CHANGELOG.md and
  docs/ describe the manifest, the workflow, the phases and recovery.

Claude-Session: https://claude.ai/code/session_01HPdKaFBKQVs8hzfgXMrnwV
feat: add manifest validate and the rpg-lemonade manifest
Some checks failed
binjovi/ci Binjovi failed the frozen plan
8da369e3b6
- src/core/names.zig, dag.zig, manifest.zig: pure modules for names and
  types, dependency ordering, and the application manifest parser and
  rules. Unknown and duplicate JSON fields are refused, and every rule
  fails closed with a problem that names the field.
- src/cli.zig, src/main.zig: `manifest validate [--manifest PATH]` prints
  one JSON receipt (`sourcerer.manifest-validate.v1`) with the counts and
  the build order, or every problem found; exit 0 or 2.
- examples/rpg-lemonade/sourcerer.json: the rpg-lemonade application,
  derived from native/catalog.json and fixture/catalog.json.
- tests/cli/manifest.sh and fixtures: the CLI contract, with a password
  canary in the environment.
- build.zig: the core tests, the example manifest, a cyclic fixture and
  both bash contracts run under `zig build check`.

Claude-Session: https://claude.ai/code/session_01HPdKaFBKQVs8hzfgXMrnwV
fix: keep the rpg-lemonade golden manifest under src/testdata
Some checks failed
binjovi/ci Binjovi failed the frozen plan
605b1b2c09
The Binjovi recipe copies build.zig, build.zig.zon, src, ci and tests into
the check stage and nothing else, so `zig build check` could not find
examples/rpg-lemonade/sourcerer.json in the cluster and the Build failed.
Golden fixtures belong under src/testdata; the manifest moves there and
every reference follows.

Claude-Session: https://claude.ai/code/session_01HPdKaFBKQVs8hzfgXMrnwV
fix: compare receipts with bash, not cmp
All checks were successful
binjovi/ci Binjovi completed the frozen plan
6ab7005114
The zig-builder image carries no diffutils, so the manifest contract's
determinism check failed in the cluster with `cmp: command not found`.
A bash string comparison needs nothing from the image.

Claude-Session: https://claude.ai/code/session_01HPdKaFBKQVs8hzfgXMrnwV
feat: add connect, the sign-on and authority preflight
All checks were successful
binjovi/ci Binjovi completed the frozen plan
63bd4189d9
- src/core/connect.zig (pure): the 26 CL commands a phase can run, the
  validated `CHKOBJ` builder, the VRM formatter, and the classification of
  a host answer into available, absent (CPF9801, CPF9810), skipped
  (CPF9802, CPF9820) or failed. A timeout or transport error is a failure,
  never a skip.
- src/host/session.zig: the only sourcerer module that imports zelnet. It
  wraps `zelnet.hostsession.HostSession` (sign on, VRM, password level)
  and runs one CL command on the shared command job, keeping the first
  escape message id.
- src/cli.zig: `connect [--manifest PATH] [--no-verify | --self-signed]
  [--no-tls]`, each flag at most once, CA flags exclusive.
- src/main.zig: the verb. Credentials and host from the environment only;
  `--no-tls` needs SOURCERER_ALLOW_PLAINTEXT=1; an invalid manifest exits
  2 before any host contact; the `sourcerer.connect.v1` receipt lists
  every authority and every manifest library with its outcome; exit 0
  when every probe was answered, 1 when the sign-on or the session failed.
- tests/cli/connect.sh: the offline contract, including a closed-port
  sign-on with a receipt and a password canary that must never appear.

Claude-Session: https://claude.ai/code/session_01HPdKaFBKQVs8hzfgXMrnwV
Sign in to join this conversation.
No reviewers
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
sean/sourcerer!3
No description provided.