diff --git a/docs/TEST_INTEGRITY.md b/docs/TEST_INTEGRITY.md index e5cc717..95185a2 100644 --- a/docs/TEST_INTEGRITY.md +++ b/docs/TEST_INTEGRITY.md @@ -1,5 +1,28 @@ # Test Integrity Notes +## 2026-10-03 — Audited one-day additional allowance + +```yaml +test_integrity_note: + change_type: new_tests + scenarios: + - id: SCN-runtime-continuation-day-override + given: "An exhausted owner-approved daily allowance and retained charged attempts" + when: "The owner approves a bounded current-UTC-day total and later pauses or the day rolls over" + then: "Extra work starts without resetting attempts; non-owner/invalid overrides refuse; pause persists; the following day uses the original daily cap" + observable_outcomes: + - "Actual launched count, charged attempts, remaining allowance, owner audit and next-day limit" + determinism_controls: + - "Hermetic project, fixed clock and controlled launch callback; no live provider or host scheduling" + anti_cheat_rationale: + prevents: + - "Erasing usage or permanently removing daily caps on an owner override" + - "Allowing a specialist to authorize extra budget or bypass pause" + relaxation: + did_relax_any_assertion: false + if_true_explain_spec_basis: "" +``` + ## 2026-10-03 — Owner-configured concurrency ```yaml diff --git a/docs/spec_changes/2026-10-03-daily-continuation-override.md b/docs/spec_changes/2026-10-03-daily-continuation-override.md new file mode 100644 index 0000000..2807910 --- /dev/null +++ b/docs/spec_changes/2026-10-03-daily-continuation-override.md @@ -0,0 +1,14 @@ +# One-day continuation allowance override + +An explicit owner decision can grant a higher bounded total for the current UTC +day using `torch continuation enable --today-max-turns 96 --yes`. +The override total includes turns already charged; it never erases usage. +The ordinary daily cap (1–48) remains unchanged. The override ceiling is 96. +At UTC midnight the override ceases to apply without a scheduled reset write. +Owner-only audited configuration, seven-slot concurrency, identity guards, +pause, unknown-outcome protection and all verification boundaries remain intact. +Omitting the override argument preserves its existing same-day decision. +This is a turn allowance, not a measured token, subscription-credit or cost limit. + +SCN-runtime-continuation-day-override checks actual extra dispatch, preserved +charges, authorization/range refusals, pause and automatic next-day expiry. diff --git a/site/console.js b/site/console.js index 1bbcbeb..bf85713 100644 --- a/site/console.js +++ b/site/console.js @@ -1041,7 +1041,7 @@ function renderAttention(groups) { function render(snapshot) { const continuation = snapshot.continuation; setText('#continuation-status', continuation?.available - ? `Automatic turns: ${continuation.attempts}/${continuation.maxTurnsPerDay} used today (UTC); ${continuation.remainingTurns} left. Concurrency policy: up to ${continuation.maxConcurrency ?? 3}. ${continuation.stopReason === 'daily-turn-cap' + ? `Automatic turns: ${continuation.attempts}/${continuation.maxTurnsPerDay} used today (UTC); ${continuation.remainingTurns} left. ${continuation.dailyOverride?.day === continuation.day ? `Owner-approved extra allowance expires at UTC midnight; normal daily cap ${continuation.configuredMaxTurnsPerDay}. ` : ''}Concurrency policy: up to ${continuation.maxConcurrency ?? 3}. ${continuation.stopReason === 'daily-turn-cap' ? 'No further automatic starts: the owner-controlled daily cap is reached. Running turns may finish.' : continuation.stopReason === 'paused' ? 'Owner policy is paused; no new automatic starts.' : 'Policy permits new eligible turns; this does not verify timer installation.'} ${continuation.held?.length ?? 0} unchanged-work hold(s) need Manager coordination. This is not measured token or cost usage.` : 'Automatic continuation policy is unavailable; do not assume the fleet can start more work.'); diff --git a/src/cli.mjs b/src/cli.mjs index 49fca6a..98cc0a0 100644 --- a/src/cli.mjs +++ b/src/cli.mjs @@ -98,7 +98,7 @@ Usage: torch setup [--parent ] [--dry-run] [--yes] [--json] torch up [--fresh] [--only ] [--dry-run] [--yes] [--json] torch recover-runtime --area --unit --invocation [--expected-session --expected-updated-at