Skip to content

Codex: implement sourceos-ai CLI, release skeleton, and Homebrew-ready artifact contract #2

@mdheller

Description

@mdheller

Mission

Turn sourceos-model-carry from carry-reference contracts into the first boring real installable: sourceos-ai.

Context

PR #1 bootstraps SourceOS AI carry contracts and examples. This issue builds the first CLI around that contract.

Required commands

Implement a compiled or executable CLI named sourceos-ai with:

sourceos-ai --version
sourceos-ai doctor
sourceos-ai self-test
sourceos-ai emit-evidence
sourceos-ai carry list
sourceos-ai carry validate
sourceos-ai carry doctor

Behavior

  • carry list reads examples/*-carry-ref.json by default and lists service refs.
  • carry validate enforces the same boundary as tools/validate_carry_refs.py.
  • doctor verifies examples, policy shape, and evidence sink shape.
  • emit-evidence emits a local JSON evidence record with tool version, platform, repo, and validated carry refs.
  • SourceOS role must remain carry-only.
  • CLI must refuse any carry ref that grants local service artifact replacement authority.

Release skeleton

Add:

  • Makefile targets: build, test, validate, dist, release-dry-run.
  • basic CI workflow for validation.
  • docs describing future GitHub Release artifact and Homebrew formula path.

Acceptance criteria

  • make validate passes.
  • make build produces a local sourceos-ai binary or executable in a predictable path.
  • sourceos-ai --version works.
  • sourceos-ai doctor works.
  • sourceos-ai carry validate validates all examples.
  • sourceos-ai emit-evidence produces JSON evidence.
  • Tests cover invalid carry refs, especially artifact replacement attempts.

Out of scope

  • Do not fetch model artifacts.
  • Do not implement real remote service invocation.
  • Do not add mutable model lifecycle authority.
  • Do not bundle heavy lab dependencies.

Codex instructions

Open a focused PR against main or continue from PR #1 if appropriate. Include command output in the PR body.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions