Skip to content

feat(prism): choose provider speed per Color - #626

Merged
lukemaj merged 2 commits into
mainfrom
prism-color-service-tier
Oct 26, 2026
Merged

lukemaj merged 2 commits into
mainfrom
prism-color-service-tier

Conversation

@lukemaj

@lukemaj lukemaj commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

What: Prism Colors can select advertised model options, including Codex Fast speed.
Why: Colors retained model and effort but dropped speed when selecting or launching a role.
So what: Merged as 3ec7a5dd84753d18902a39ca3390f95879b25528 after green CI and review. Bestia installation is held until Lukasz sends go after the wedding deployment.

Closes #625. Implements Lukasz's requested scope from 2026-10-26 within the existing Prism capability. This supports the Objective's delegated Drafters without changing defaults.

A Color now accepts optional options using the existing model-option contract. Prism retains these values alongside legacy effort and validates them with the same validator used by explicit delegation targets. The shared Color picker exposes advertised options, labels serviceTier: priority as Fast, preserves speed through effort edits, and includes options in Color identity. Spectrum preserves the same choices for participants, fallbacks and White. Old settings decode unchanged, and Grok Fast stays a separate model.

Accepted P2 correction

Pushed correction commit: 37d80a5f9b9d2780300e94b224d3132834ffc064. The independent exact-head review found that saved Spectrum fallbacks could bypass advertised-option validation after primary refusal. Round dispatch now reuses the shared launch validator for participants and White before every uncommitted start. Invalid ids, values and types fail explicitly; unavailable candidates can still register and fall through in order, and accepted-command replay is preserved.

The real Spectrum event/service seam reproduced six malformed-backup starts before the fix. All eight new cases pass after it, including White and a valid priority fallback; the completed affected run passed 114 tests across 10 files. Server typecheck, changed-file lint and committed-head fork-check passed; lint reports one pre-existing warning in untouched fixture code. Canonical handoff with exact commands, final confirmation runs, outputs and limits. Final committed-head peer authority proof also passed 19 tests. Independent review passed on this exact head, with no actionable findings; review/independent=success was verified as created by lukemaj. Current-head CI build/typecheck, lint, smoke and fork checks passed; web/general and remaining server test jobs are still running at handback. No complete CI success is claimed. The original UI proof below remains applicable because this correction changes no UI.

Original feature proof

Pushed baseline head: a887ac135612f158708d5073d53ae20d01e68175, base: 6657fe19a4ed1d0e6c64226a4ee5d7b652725b18. Supported Node v24.18.0.

  • 92 focused tests across contract decoding, Prism selection/validation, Spectrum settings/launch and Color picker/draft logic passed.
  • 6 focused existing Promachos launch tests passed, with 97 unrelated tests intentionally skipped.
  • 1 Chromium interaction test passed through the web package's browser project, covering Fast save, effort edits, remount persistence, default removal and boolean false.
  • Affected contracts, server and web typechecks passed; changed-file lint and bash scripts/fork-check.sh --upstream upstream passed.
  • Isolated development browser confirmed Fast and Standard Reviewer Colors with identical model/effort persist separately after reload, and default removal restores provider choice. No live provider run was launched. Web/desktop share the picker; native mobile has no Color settings surface changed here. Runtime validation is provider-descriptor driven, with no provider adapter changes.
  • Full commands, results and implementation handoff. Full repository checks remain CI-owned.

Before:
Before: no Color speed control

After reload:
After: otherwise identical Colors retain Fast and Standard separately

Elon record

Requirements and who asked: Lukasz requested per-Color provider speed, advertised validation, launch forwarding, Fast UI, distinct tiers, backward compatibility, tests and one reviewed PR.
Deleted: No new adapter or Grok speed abstraction, no routing-default change, no version bump under repository policy, no unrelated cleanup.
Bottleneck: The Color contract and launch conversions omitted model options; existing option contracts and explicit-target validation solve that omission.
Checked myself: Inspected the complete diff and execution paths, checked test output and typecheck/fork-check logs, ran the Chromium interaction test, and inspected the isolated before/after save/reload evidence.

No merge or install is authorized. The live source checkout was not changed. Website impact: runtime settings UI only; no marketing, SEO or URL changes. Package versions remain upstream-owned.

Written with GPT-6.1-Sol through the Codex harness in T3 Code.

Colors now retain provider model options alongside effort, including Codex Fast speed. Preserve options through Prism and Spectrum launches, validate advertised selections, and keep tier-only Colors distinct.

Written with gpt-6.1-sol through the Codex harness.
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Oct 26, 2026
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 4.9 KiB 5.0 KiB +23 B (+0.5%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB +23 B (+1.9%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 20.8 KiB 20.9 KiB +41 B (+0.2%) 29.3 KiB ✅
Codex Live turn messages 1 2 +1 (+100.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.2 KiB 21.2 KiB 0 B (0.0%) 29.3 KiB ✅
Claude Live turn messages 2 2 0 (0.0%) 8 ✅

Baseline: 6657fe1 · PR result: 37d80a5 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@lukemaj

lukemaj commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

Independent review round 1 ended without a verdict: Selected model is at capacity. Please try a different model. Its pending status was changed to error rather than left pending. A fresh bounded review was delegated through the same Prism reviewer role; the exact candidate remains a887ac135612f158708d5073d53ae20d01e68175.

All CI checks now pass on that candidate: full tests, all eight server shards, web tests, build/typecheck, lint, Fork Stack Model and Release Smoke. Review remains required before handoff; no merge or installation is authorized.

@lukemaj

lukemaj commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

What: Independent review found one blocking P2 defect on a887ac135612f158708d5073d53ae20d01e68175.
Why: Spectrum retains saved fallback Color options without applying advertised-option validation when those fallbacks later start.
So what: Fix the delayed fallback validation path and obtain review of the replacement head; this review does not authorize merge or installation.

Reviewed exact base 6657fe19a4ed1d0e6c64226a4ee5d7b652725b18 to head a887ac135612f158708d5073d53ae20d01e68175, all 19 changed files and relevant consumers. This is a fresh independent review; the aborted capacity round supplies no verdict.

P2: Validate saved Spectrum fallback options before they can become a run

Changed location: apps/server/src/spectrum/settings.ts:20.

Trigger: save a Spectrum slot or White with a valid primary and a fallback whose model advertises serviceTier as a select, but whose stored options contain [{ id: "serviceTier", value: true }]. This value passes the new Color schema because option values permit strings or booleans. Register the Spectrum while the primary is available, then disable the primary for that project before its round dispatch. The existing delayed-fallback test in apps/server/src/spectrum/delegatedTask.integration.test.ts:398 demonstrates that admission/refusal sequence.

Reachable path and effect:

  • The changed colorCandidate now carries these saved fallback options into launch input. LaunchService.ts:293-297 only converts the fallback selections. When the primary resolves, resolveFrom returns the remaining fallbacks unchanged at line 281, so Prism.validateLaunchSelection has never checked them.
  • On the later primary refusal, barrier.ts:68-96 moves that unchecked fallback directly into the pending command's modelSelection. RoundService.ts:167-192 dispatches it without the Prism validator. ThreadManagementService.ts:741-768 checks provider enablement, rather than option descriptors, and the orchestrator retains the selection in the run.
  • For this concrete malformed tier, codexModelOptions.ts:7-14 and packages/shared/src/model.ts:54-60 read only string tier values, so CodexAdapterV2.ts:762-765,823 omits the tier and uses the provider default. The requested validation error becomes a successfully admitted run with a silently dropped override. Unsupported string values and unknown option ids bypass the same required validation.

Apply the advertised-option validator to saved fallback selections before they can be dispatched, including White, and cover a valid primary followed by a delayed fallback containing an invalid id/value/type. The new Spectrum integration test only asserts persistence of valid options and uses capabilities: null, so it does not exercise this boundary.

Coverage and limits

Inspected contract compatibility and option decoding; worker lanes, roles and Run groups; explicit/inherited selections and unavailable-provider catalog refresh; Promachos and top-level/scheduled launches; Spectrum primary, copied White, explicit White and delayed fallbacks; shared picker and settings save/reload/identity. No other supported blocker found in that scope. Grok Fast remains a distinct model.

Confirmed with gh run view 40343675875 --repo toolboxmd/chromeria --json headSha,conclusion,event,status,url,jobs that CI completed successfully on the exact reviewed head, including server shards, web tests, build/typecheck, lint and Release Smoke; gh pr checks 626 --repo toolboxmd/chromeria also shows Fork Stack Model passing. Read the focused-test commands/results in the linked Issue handoff and inspected the added tests; I did not rerun tests, drive a browser, start a server or launch a provider. This finding is established by source tracing, not a newly executed runtime reproduction. Both source checkouts were kept read-only, and the specified worktree remained clean at the reviewed SHA.

Requirements and who asked: Lukasz requested one independent exact-head coverage review of Issue #625, including advertised option validation and Spectrum fallbacks.
Deleted: No implementation, test rerun, browser/server startup, installation or merge; no architectural expansion.
Bottleneck: Delayed Spectrum fallback dispatch bypasses the validator used for primary and explicit launch selections.
Checked myself: Read the complete exact diff and the launch, fallback, dispatch and Codex option consumers; verified live PR identity and exact-head CI through authenticated gh.

Verdict: changes required. Reviewed by GPT-6.1-Sol through the Codex harness in T3 Code, independently of the implementation authors.

@lukemaj

lukemaj commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

Accepted the P2: delayed Spectrum fallback selections reach RoundService dispatch without model-option validation, including White. A focused fix and regression proof are now owned by a new worker in the same exclusive task worktree. Lukasz approved Codex GPT-6.1-Sol Fast (serviceTier priority), high effort for today; the fix and replacement review use that target. No merge or installation is authorized.

Validate each uncommitted Spectrum start with the shared advertised-option validator, including White and delayed backups. Keep unavailable candidates eligible for ordered fallback without hiding invalid options, and retain accepted-command replay.

Written with GPT-6.1-Sol through the Codex harness in T3 Code.
@lukemaj

lukemaj commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

What: Fresh independent review found no blocking or optional actionable defects on 37d80a5f9b9d2780300e94b224d3132834ffc064.
Why: The prior delayed Spectrum fallback validation defect is fixed, and the cumulative Color option changes preserve the required launch and persistence paths.
So what: Record review/independent=success on this exact SHA; CI remains separate, and Lukasz must approve merge and installation.

Reviewed base 6657fe19a4ed1d0e6c64226a4ee5d7b652725b18 to head 37d80a5f9b9d2780300e94b224d3132834ffc064, including the complete cumulative diff across all 22 changed files and the relevant surrounding consumers. Verified the live PR still has those exact base/head SHAs and is open, and the supplied worktree is clean at that head. This review is independent of the implementation authors and does not reuse a previous verdict.

Findings and prior defect

Blocking findings: none. Optional actionable findings: none.

The previous P2 is cleared:

  • RoundService.ts:178-191 validates each uncommitted start through Prism.validateLaunchSelection before dispatch. A fallback installed by barrier.fallBack returns through this same loop, including White.
  • PrismService.ts:91-102 rejects unsupported advertised option ids, values and types with invalid_request. A newly refused malformed selection has no rejected dispatch receipt, so it propagates an explicit error rather than moving to another backup. Provider/model unavailability remains eligible for fallback through refusedBeforeCommit.
  • Accepted-command replay bypasses this new validation and still dispatches the original durable command to bind its existing run. The reconstructed peer workflow fixture supplies its existing launch catalog to the rebuilt RoundService; production already provides the registry and adapter services.
  • delegatedTask.integration.test.ts:477 drives saved Color and White settings through registration, delayed primary refusal and actual round dispatch. Negative cases assert invalid_request and no runs even with a valid later backup. Positive cases assert priority reaches the persisted run and unavailable backups are skipped.

Cumulative coverage

Inspected backward-compatible Color decoding and settings round trips; provider-advertised validation and duplicate ids; effort merging without discarding other options; role and worker-lane selection; inherited selections and refreshed unavailable catalogs; Run group selections retaining tier-only differences; Promachos, top-level and scheduled launch consumers; Spectrum primary, fallback, copied White and explicit White paths; shared picker choices, option clearing, model/provider changes, draft identity and autosaved persistence. Followed the existing Codex tier reader through adapter turn construction. Grok Fast remains a model, with no new speed abstraction or routing-default change.

Proof and limits

I inspected the implementation's raw local logs: six negative cases failed before with expected 'Success' to equal 'Failure'; all eight new delayed-fallback cases passed after; the focused run reports 114 passing tests across 10 files; the final delegated-task run reports 18 passing tests; and the final peer workflow run reports 19 passing tests. Inspected affected server typecheck/lint and exact-head fork-check output, including fork-check: OK; the lint warning is at an untouched fixture line. Commands and execution ownership remain in the canonical Issue handoff.

This reviewer ran no tests, browsers, dev servers or provider calls. Previous UI proof was inspected through the test source and recorded handoff, not re-executed; no live Fast request was verified. gh pr checks still showed pending CI tests at the final check, so this verdict does not claim complete CI success or merge readiness. No source, checkout, live state, installation or merge was changed. Ran git diff --check successfully and confirmed the worktree remained clean at the reviewed SHA.

Requirements and who asked: Lukasz requested a fresh independent exact-head review of Issue #625, the full cumulative diff and consumers, and the prior fallback-validation correction.
Deleted: No implementation, duplicate test execution, browser/server startup, architecture expansion, merge or installation.
Bottleneck: Establish whether delayed fallback dispatch now enforces advertised options while preserving fallback and accepted replay.
Checked myself: Read the full exact diff and relevant consumers, traced the repaired dispatch and replay paths, inspected raw before/after proof, and verified live PR identity and checks through authenticated gh as lukemaj.

Verdict: PASS, no supported actionable findings in the inspected scope. Reviewed by GPT-6.1-Sol through the Codex harness in T3 Code, independently of the implementation authors.

@lukemaj
lukemaj merged commit 3ec7a5d into main Oct 26, 2026
29 checks passed
@lukemaj

lukemaj commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

What: Bestia installation of merged #626 has started under the approved midnight schedule.
Why: The installed source marker is still #624 (6657fe19a4ed), and no exact #626 artifact was prepared.
So what: The unchanged updater builds, backs up, activates, checks stability and resumes cut threads; post-restart Fast Color, outreach and Instagram-watch verification remain pending.

Target: bestia only. Exact merged commit: 3ec7a5dd84753d18902a39ca3390f95879b25528. Transient unit: chromeria-install-626-20261027.service; private log: ~/.cache/chromeria-update/3ec7a5dd8475/update.log. Command: chromeria-server-update --now 3ec7a5dd84753d18902a39ca3390f95879b25528. Normal continuation is enabled. The deployment follows the unchanged runbook updater and #624 procedure; no source checkout switches, installed script changes, new persistent automation or wedding deployment.

Pre-check: host bestia; live source #624; Chromeria start 2026-10-26 13:20:34 Warsaw; outreach start 23:13:39 Warsaw. Runbook fetched/rebased cleanly; installed updater equals recorded source; 456 GiB available.

Requirements and who asked: Lukasz approved #626 on bestia after midnight, including health, Fast Color acceptance, actual venue relaunches and re-registering Instagram inbox/request watches using the existing logged-in profile only.
Deleted: Duplicate source implementation/review, other-machine rollout, manual thread resumes and suppressed updater continuation.
Bottleneck: Exact artifact build, snapshot and the established stability observer.
Checked myself: Merged commit, live installed marker, service timestamps, cache absence, runbook records, updater equality, disk capacity and runbook clean fetch/rebase.

@lukemaj

lukemaj commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor Author

What: Merged #626 is installed and verified on bestia at source 3ec7a5dd84753d18902a39ca3390f95879b25528.
Why: The approved midnight rollout adds per-Color provider options, including the Codex Fast tier, to the previously installed #624 runtime.
So what: Bestia is healthy, Fast Color persistence passes, outreach has completed a real post-restart venue run, and Primary/General/Requests Instagram watches are renewed and accepted.

Installation used unchanged chromeria-server-update --now 3ec7a5dd84753d18902a39ca3390f95879b25528 in transient chromeria-install-626-20261027.service. One service stop/start occurred at 00:15:17/00:15:22 Warsaw on 2026-10-27. Updater exit 0, stable for 600 s, same processes, DONE at 00:27:56 Warsaw. Normal cut-thread continuation stayed enabled; the captured interrupted task has a successor run. Held queues reported by the updater were left with their owners.

Artifact archive SHA-256: 7075b2a14aec7eabb3252c119adab1e86163727ff2060cbdfb0e54cdf9a33342. Installed executable/launcher/backend SHA-256: e30bea409f7a3d851df228b42f1bd7586d6bba305f08374c2c06aa6901b08cc8. Archive and managed-launcher smoke passed. Snapshot ~/t3-backups/2026-10-27-pre-3ec7a5dd8475-vacuum contains all three databases with integrity ok; immediate rollback retains #624. Prior rollback was renamed, not deleted.

Verified actual environment discovery (bestia, package 0.1.0), unchanged launcher/backend, a real tool-free Haiku reply and settlement, preserved settings/credential-vault configuration, no unexpected restart, and a real outreach venue agent launch followed by completion. journalctl --user -u italian-wedding-outreach.service --since '2026-10-27 00:15:17' has zero ChromeriaError lines. No venue agent was active at the cut; the completed post-restart venue run followed an actual changed inbound found during reconciliation.

Fast acceptance: the live orchestrator_capabilities catalog advertises Codex gpt-6.1-sol option serviceTier=priority, labeled Fast. The browser's live app session was unpaired, so no live pairing/grant was added. The exact installed binary, running against fresh disposable isolated state, accepted server.updateSettings with a Color carrying [{"id":"serviceTier","value":"priority"}]; a new server.getSettings connection returned that Color unchanged. This proves artifact settings persistence, not a live UI save or a billed Fast model request. Live Prism kits remain equal to cut-time settings.

Instagram: existing logged-in profile only, no login or checkpoint. Each owned Primary, separately selected General, and Requests tab completed the installed bootstrap using the persisted observation watermark. Independently checked all three actual registration functions against installed source (6770 bytes, SHA-256 729fc5998e950b0e0543a630979be795a78876492e4b9dc5431157f23cd8e941). Independently read actual production queues with the existing auxiliary project-scoped Read credential: 7/1/0 parsed observations, all active, cursor 1. Atomically replaced only browser_watches, preserving stable slots and all other settings. Reconciliation against retained observations queued one genuine changed-inbound chat check; repeat queued none. That venue run completed. Timer restored, ordinary loop successful and browser watch health advancing. Stationary watched tabs remain open under their retained host.

Private raw evidence: ~/.cache/chromeria-update/3ec7a5dd8475/ on bestia. No source checkout changes, wedding deployment, new live credential/grant, login, manual thread resume or live routing change. No repository-wide tests rerun for this unchanged reviewed merge. The two proof boundaries above are explicit: no live Prism UI save and no actual Fast inference request.

Requirements and who asked: Lukasz approved the exact bestia install after midnight and requested health, Fast Color acceptance, outreach relaunch and Instagram watch recovery, with PR and pushed runbook evidence.
Deleted: Duplicate implementation/review, other-machine rollout, suppressed recovery, manual resumption, new persistent automation and live browser pairing.
Bottleneck: Exact artifact build, verified database snapshot and established 600-second observer; all completed. Unpaired live UI was resolved for settings persistence using isolated state of the same installed artifact.
Checked myself: Actual updater log and exit state, installed/discovery identity, snapshot integrity/rollback, live catalog, raw artifact save/reload tool response, actual registration/bootstrap inputs, production scoped reads, ordinary watch drains, real venue run records, journal and cut-thread successor.

Deployment and integration verification: GPT-6.1-Sol through the Codex harness in T3 Code; retained computer-use operator performed browser actions. Runbook completion record follows in the delivery task.

Finalization: exact updater build worktree removed normally; both captured isolated proof processes verified absent and disposable proof home/keys/logs removed. Retained stationary Instagram watch tabs remain active. Bestia's runbook change record and current installed-source reference were committed and pushed successfully, with local/remote HEAD equal and a clean checkout. Final live discovery, Chromeria/outreach/timer active checks, ordinary send-loop success, watch-health advancement and zero post-restart ChromeriaError rechecked after cleanup.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(prism): choose provider speed per Color

1 participant