Skip to content

Draft RFC: bounded job limits and recovery semantics (O03) - #22

Merged
andrewperis merged 3 commits into
mainfrom
rfc/o03-attempt-limits-recovery
Oct 28, 2026
Merged

andrewperis merged 3 commits into
mainfrom
rfc/o03-attempt-limits-recovery

Conversation

@andrewperis

Copy link
Copy Markdown
Collaborator

Summary

Draft RFC 0011 for Studio O03 #104. It proposes finite job/time/material limits and cancellation, retry, and restart/reconciliation rules for one synthetic Comic Manifest revision and one offline mock Provider Execution call per attempt.

Candidate host defaults are one active job with no queue, two attempts total, a 300,000 ms monotonic execution budget, 8 MiB rendered prompts, 16 MiB normalized provider text per call, 64 MiB generated artifacts per job, and 128 MiB aggregate material. Lifecycle metadata is capped at 32 entries of at most 32 KiB each, with 1 MiB reserved. These are proposed owner choices, not existing contract requirements.

Restart recovery is read-only by default. A one-job, one-transition caller/owner authorization is required before restart-driven mutation. A prepared call may dispatch once only if the reader confirms that dispatch-started is absent, using the existing IDs. Authorization cannot override an expired deadline, unknown clock epoch, changed revision, ambiguous dispatch, blocked timeout, or unresolved write. The explicit retry proposal is limited to one eligible, resolved no-action rate-limit result.

RFC 0010 coordination

RFC 0010 was merged to main at 952518820f8f7984414acbedba9dcc8d7082f394 and remains Draft; contract-owner decision pending. The O03 RFC links to the current main document. The merge did not accept RFC 0010 or authorize production work.

Decision boundary

This remains a design draft. It adds no schema, runtime, storage implementation, real provider, release, or production authority. Owner decisions are proposed in the RFC; semantic fixture rows are expectations, not executed tests.

Validation

  • git diff --check passed.
  • Relative Markdown links and local heading anchors passed.
  • The existing repository CI checks current contract/build health; it does not prove the proposed O03 semantics.

Base: 952518820f8f7984414acbedba9dcc8d7082f394
Head: 41dfe11556e2a7e9c9d66bc057f1fb8ca0003726

@andrewperis
andrewperis marked this pull request as ready for review October 28, 2026 17:11
@andrewperis
andrewperis merged commit 3f5549f into main Oct 28, 2026
2 checks passed
@andrewperis
andrewperis deleted the rfc/o03-attempt-limits-recovery branch October 28, 2026 17:11
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 28, 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-28T17:15:00.370157Z 41dfe11 Draft marked ready
ℹ️ 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: 41dfe11556

ℹ️ 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 on lines +172 to +177
The job deadline prevents admission of a call or retry with no positive budget
remaining. When it expires during a provider call, the host requests cancellation
once through the existing out-of-band cancellation mechanism. It preserves any
normalized outcome that returns, even after the deadline. Bounded persistence
and terminalization of that already-started attempt may continue within its
previously reserved material budget; they do not reset the deadline or permit

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 Cap the provider timeout at the remaining job budget

When a call is dispatched with any positive time remaining, its Provider Execution timeout_ms may still be as high as 3,600,000 ms (schemas/json/execution-contracts/v1/provider-execution.schema.json:446); this rule merely requests cancellation at the 300,000 ms job deadline and allows the call to return afterward. If cancellation is not honored promptly—as the later successful-response path explicitly anticipates—the purported five-minute execution budget can be exceeded by almost an hour. Require the call timeout to be no greater than the remaining job budget, or define another hard upper bound for cancellation completion.

Useful? React with 👍 / 👎.

Comment on lines +275 to +277
The original deadline MUST still be unexpired for restart-driven preparation,
dispatch, outcome advancement, or terminal linking. After expiry, only reads
and an explicitly requested cancellation-only marker/signal are permitted.

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 Allow expired jobs to release the sole admission slot

If the process restarts after the deadline while an exact provider outcome or immutable result is recoverable, this rule permits only reads or cancellation and the recovery table prohibits persistence or a terminal link. Because an unresolved job retains the only admitted-job slot (line 82), and no abandonment or other terminal reconciliation transition is defined, that common crash timing can leave the runner permanently rejecting every subsequent job. Add a bounded post-expiry reconciliation/closure path that cannot initiate provider work but can safely release the slot.

Useful? React with 👍 / 👎.

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