Skip to content

Cloud goals take --check and a model pin; Claude 5.5 prices - #37

Merged
mattbaconz merged 1 commit into
mainfrom
feat/cloud-goal-checks
Oct 22, 2026
Merged

mattbaconz merged 1 commit into
mainfrom
feat/cloud-goal-checks

Conversation

@mattbaconz

@mattbaconz mattbaconz commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

With a cloud key, phonton goal picked its own checks: Cargo, npm test or the browser check. A Python repository ended "Verification not run", and nothing pinned the model, so standard and frontier work went to larger models than the configured one. A fair comparison with the bare model or another harness was not possible on the cloud path. A Claude smoke run on Aider Polyglot exercises found these gaps, plus two that cost money: a junctioned node_modules was dropped from the verification copy, and the resulting 'jest' is not recognized failure was retried and escalated ($0.46 on one exercise).

Changes

  • phonton goal --check '<JSON array>' without --local, parsed exactly like phonton goal --local --check. Each check runs on the patched verification copy in place of the detected Cargo, npm test and browser checks and must exit 0; repeat the flag for several. Without it, detection is unchanged. The worker and the orchestrator's independent re-verification both use the checks, and they are part of the verdict cache key. A goal routed to the local harness forwards them.
  • pin_model = true under [provider] sends every tier to model. Off by default, so escalation is unchanged.
  • The verification copy links node_modules when it is a symlink or a Windows junction, not only a real directory.
  • A test command the shell cannot find ('jest' is not recognized, sh: 1: jest: not found, command not found, macOS execvp() failure) is VerifyResult::Unavailable, which stops without retrying or escalating, for npm test and for --check commands.
  • Budget pricing for claude-haiku-5-5 ($0.10 / $0.50 per 1M tokens), claude-sonnet-5-5 ($2 / $10) and claude-opus-5-5 ($4 / $20), list prices for prompts up to 100K tokens, so receipts no longer say pricing_known: false.
  • README and CHANGELOG (Unreleased). No version bump or release.

Tests

  • explicit_checks_replace_detection_and_run_in_the_copy, missing_test_runner_is_recognized_on_each_shell, linked_node_modules_reach_the_check_copy, and the check-aware memo key in check_memo_keys_on_exact_tree_content_and_skips_unavailable (phonton-verify).
  • explicit_checks_reach_worker_verification (phonton-worker dispatcher).
  • headless_goal_check_takes_json_arrays_like_local_goals, pinned_model_dispatches_on_every_tier, claude_5_5_prices_cover_every_dispatch_tier (phonton-cli).

Verified on Windows

  • cargo fmt --all -- --check and cargo clippy --locked --workspace --all-targets -- -D warnings pass.
  • cargo test --locked --workspace --no-fail-fast after npm ci --ignore-scripts and npx playwright install chromium: 812 passed, 0 failed, 15 ignored, including the browser check.
  • Release build, phonton goal --help shows --check, and phonton config show reads pin_model = true.
  • Claude smoke, Aider Polyglot scale-generator (Python), ledger (JavaScript), luhn-from (Rust), arms phonton/bare/opencode, every arm on claude-haiku-5-5 (pin_model = true). Phonton got the same test command as the scorer through --check, as the local harness does. All 9 runs passed the pristine tests with no false passes. Each Phonton goal ended review-ready after one model hop on Haiku 5.5, with the test layer passing and pricing_known: true; its receipts total $0.0092. The whole smoke cost about $0.05 (bare $0.006, OpenCode $0.033).
  • Before this change, the same smoke on 0.25.1 ended the Python goal at "Verification not run", and the JavaScript goal escalated to Sonnet 5.5 after jest went missing from the verification copy ($0.46).

- phonton goal --check '<JSON array>' without --local runs that command on
  the verification copy in place of the detected Cargo, npm test and browser
  checks. Worker and orchestrator re-verification both use it.
- [provider] pin_model = true sends every tier to the configured model.
- A symlinked or junctioned node_modules reaches the verification copy.
- A test command the shell cannot find is Unavailable, not a retried and
  escalated failure.
- Budget prices for claude-haiku-5-5, claude-sonnet-5-5, claude-opus-5-5.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-22T08:50:33.955768Z 1c8ccd7 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1c8ccd7e81

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread phonton-cli/src/main.rs
let mut prompt_file: Option<PathBuf> = None;
let mut read_stdin = false;
let mut resume_task_id: Option<TaskId> = None;
let mut checks = Vec::new();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve custom checks across resumed goals

When a goal started with --check pauses and is later continued with the documented --resume <task-id> command, this fresh option list is empty unless the user happens to repeat every check. PausedRunSnapshot does not persist the checks, so the resumed orchestrator silently falls back to detected Cargo/npm/browser checks and can accept subsequent edits that fail the verification command selected for the original run. Persist and restore the checks with the paused snapshot, or require them explicitly when resuming.

Useful? React with 👍 / 👎.

@mattbaconz
mattbaconz merged commit 048bea7 into main Oct 22, 2026
2 checks passed
mattbaconz added a commit that referenced this pull request Oct 23, 2026
* Release 0.26.0: Cloud goals run your own checks

Bump the version in phonton-cli/Cargo.toml, Cargo.lock, package.json and
the README badge, date the Unreleased CHANGELOG entry as 0.26.0, and add
release-notes/v0.26.0.md. The release carries #37 (cloud `--check`,
`pin_model`, Claude 5.5 prices, linked node_modules, missing test runner
stops as unavailable) and #38 (64K reply cap with streaming for Claude 5+,
retry of a thinking-only reply at low effort).

* Release notes: forth and bowling pass on the release binary
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.

1 participant