Skip to content

Integrate CLI quote, configuration and webhook source changes - #58

Merged
irl-dan merged 103 commits into
mainfrom
codex/imp-110-cli-integration
Oct 9, 2026
Merged

irl-dan merged 103 commits into
mainfrom
codex/imp-110-cli-integration

Conversation

@irl-dan

@irl-dan irl-dan commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Integrate the pending CLI source stack (#49 and #51–#57): webhook documentation, parameterized/program-aware holds, persistent user configuration, packaged SDK defaults, entitlement-based job limits, webhook contract settings and hidden-model filtering. Preserve both Bun and Rust implementations and their shared public contracts.

Resolve shared guide fixtures by regenerating them from the combined guide; retain both entitlement and contract-settings Rust checks and all changelog entries.

Validation: combined service-help generation check and whitespace checks pass. Pinned-toolchain provider-free admission passed the completed Rust, Bun, architecture, shared-contract and generation gates; the remaining run was stopped at the founder’s explicit request to skip CI waits and prepare a clean overnight workspace. Full combined admission is not claimed. No provider calls, release publication or hosted-service mutation is included.

rawwerks and others added 30 commits October 6, 2026 16:36
The guide and jobs docs said what job create returns but not how a sender
uses signing_secret: the X-OpenProse-Delivery header and HMAC-SHA256 over
deliveryId + "\n" + rawBody. Add both with an openssl + curl recipe and
the response codes, and correct endpointUrl to endpoint_url in the guide
and schemas README. Regenerate the pinned guide cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…p-098-packaged-sdk

# Conflicts:
#	cli/protocol/OWNERSHIP.md
# Conflicts:
#	cli/protocol/OWNERSHIP.md
…ckaged-sdk

# Conflicts:
#	cli/protocol/OWNERSHIP.md
#	cli/rust/crates/prose-cli/src/main.rs
…ckaged-sdk

# Conflicts:
#	cli/bun/test/cli.test.ts
# Conflicts:
#	cli/protocol/OWNERSHIP.md
mm and others added 29 commits October 7, 2026 03:32
GET /triggers keeps max_triggers as the legacy free ceiling and reports
the account's limit in trigger_limit: limited with max, unlimited, or
unavailable. job list and service triage showed max_triggers, so a paid
account read "Jobs: N of 5 allowed", and job_limit copied a key the
service never sends. job_limit now mirrors trigger_limit ({kind, max?});
max_jobs and triage jobs.max are the account's max when limited and null
otherwise; triage gains jobs.limit; the human line says "of M allowed",
"(unlimited)" or "(limit unavailable; try again)". An unknown kind reads
as unavailable, and an older service without trigger_limit reads as
limited at max_triggers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add cases for a webhook spec whose binding keys fail the local schema
check and for binding keys without program_ref, where the service's 400
passes through. The job create plan's quote now sends job_type (the
spec's type), so a service that reads it prices the model a job of that
type runs on when the spec names none; docs note the difference on a
service that does not. Tidy remaining hold wording in case descriptions,
the run quote synopsis and the changelog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The service now prices a program itself: GET /run/quote?program_ref= for
a saved program and POST /run/quote with the POST /run body. The run
submit plan posts its exact submission body; run quote FILE posts the
program and run quote --from names it (resolved and checked as run
submit does); the job create plan names its pinned program_ref. Explicit
options still override the program's own settings, and the CLI still
never inspects program text. run quote reports the service's basis
(each input with its source), and program_not_found maps to
SERVICE_RESOURCE_NOT_FOUND.

sync_service_interactions.py accepts the service's public interaction
projection (interactions/2, no principals table); the catalog is
re-vendored from it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The service reports basis.model.source job_default when a job's type
picks the model; run quote passes it through. The job create plan's
quote keeps job_type next to program_ref.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
job contract attach gains --model, --reasoning-effort, --repo,
--commit-output, --input, --inputs-file, --environment, --file,
--clear-repo, --clear-commit-output, --clear-input, --clear-files and
--replace for webhook jobs; other job types refuse them after the job is
read. Re-attaching a bound program changes only the options given: on a
service that reports each binding's environment it re-binds the same
reference with just the changed fields (null clears); on an older
service it merges the saved settings and warns that stored files and
environment may be dropped. --replace onto another revision is a full
replace that carries the saved settings and environment (stored files
must be given again with --file); --replace onto a program that is
already bound is refused. The attach plan quotes the hold for the
binding as it will run, with the job's type.

job contract list reports each binding's saved settings, effective
model, revision and bind time. Interrupts during a plan's advisory quote
now stop the command. run quote's help is reworded briefly to keep the
published manifest within its size budget, and the contracts response
schema names program_ref.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Address a second review of job contract attach. The job is always read
first: another job type, and a plain re-attach of a bound webhook
program, send only program_ref. On a service that does not report stored
files and environment, re-binding a bound webhook program is refused
unless the files and environment are given or --allow-reset accepts the
reset; --replace needs --file, --clear-files or --allow-reset when the
old binding has stored files. The stderr notes and the live hint are
gone in favour of these refusals.

--commit-output takes OWNER/NAME (the service picks the branch), a new
--repo no longer drops a saved commit output silently, --repo naming the
saved repository keeps its branch, and --file names follow the names the
service stores. The published manifest size budget is raised to 106,496
bytes for the new options.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add shared cases for the --file count limit, non-UTF-8 file content, the
service's 409 for a --replace target that is already bound, and a
service refusal to change a live binding. A bound program on a merging
service now gets a bare program_ref when no setting changes (only
--allow-reset or a same-ref --replace), the webhook-only refusal names
--allow-reset, both ports check --commit-output against --repo before
reading files, and the --allow-reset help mentions --replace.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
model list printed an "Also accepted (not recommended)" section and kept
hidden entries in result.catalog. Hidden models are accepted but not
shown in any interface, so the listing now skips them like deprecated
models. Acceptance is unchanged: a named hidden model still passes the
local --model check and reaches the service.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…codex/imp-110-cli-integration

# Conflicts:
#	cli/conformance/cases/service/framework/service-guide-human.json
…odex/imp-110-cli-integration

# Conflicts:
#	cli/conformance/cases/service/framework/service-guide-human.json
…codex/imp-110-cli-integration

# Conflicts:
#	cli/CHANGELOG.md
… codex/imp-110-cli-integration

# Conflicts:
#	cli/CHANGELOG.md
#	cli/rust/crates/prose-runner-core/src/service/jobs.rs
…ex/imp-110-cli-integration

# Conflicts:
#	cli/CHANGELOG.md
@irl-dan
irl-dan merged commit a1cb006 into main Oct 9, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants