The model tool inventory is an integration contract, not a deployment preference. Some Hosts cache tool descriptors and require an explicit schema refresh. Restarting WebCodex or changing configuration does not update those cached descriptors.
Two optional Server environment settings are read once after the normal startup environment-file loader. They can be set in the existing Server environment file:
WEBCODEX_GOAL_WORKFLOW=on_demand
WEBCODEX_MCP_APP_RESUME_MODE=user_confirmedWEBCODEX_GOAL_WORKFLOW accepts on_demand (default) or preferred.
On-demand ordinary coding, review and multi-step work creates no Goal just because
Goal tools are available. Explicit user-requested durable plans, handoffs and
already-established exact Goals remain supported. Preferred recommends a durable
Goal when substantial work benefits from one; user intent and scope still win.
WEBCODEX_MCP_APP_RESUME_MODE accepts unknown (default), user_confirmed or
unattended. This is an operator declaration for this deployment, not protocol
capability detection. Unknown and user-confirmed never claim confirmation-free
continuation. Unattended must be selected only after separate deployment-level
verification; it neither bypasses Host confirmation nor guarantees scheduling.
Invalid settings fail startup with allowed values, without echoing supplied data.
These settings are independent from direct/host_code_mode orchestration timing.
No live configuration API, polling, automatic Host detection, or hot reload is introduced. Change settings and restart the named Server through the ordinary operator deployment procedure. No Host tool-schema refresh is needed for these policy changes: names, ranks, Direct/gateway admission, tool descriptions, input/output schemas and App resource associations do not depend on the settings. An actual future tool-contract change still requires the Host's refresh process. The preceding taxonomy/Direct-reduction commit is such a separate contract change; this policy layer does not remove its one-time refresh requirement.
- Host schema refresh registers tool contracts. Policy selection never requests it.
- Guidance refresh obtains current instructions as ordinary tool-result data.
An active model conversation may retain old guidance even after a Server restart.
On announced policy change, missing/stale instructions, or context recovery,
request
_wc.context=["webcodex.workflow"]on an already-needed ordinary call. Do not poll for policy changes or assume a restart changes retained model context.
The existing webcodex.workflow entrypoint returns the current runtime policy.
Its payload uses the existing workflow schema and does not change permissions.
The canonical internal startup diagnostic continues to use the deterministic
on-demand baseline so source validation does not depend on deployment settings;
public model policy is delivered by the explicit context channel, not inferred
from a Session, project instruction fingerprint or a Host tool description.
Selected Goal work can then request _wc.context=["webcodex.goal_workflow"].
This supplemental chapter is discovered in the workflow result, not appended to
every cached descriptor's example key list. The already-open, bounded context-key
string contract accepts it without a new tool, enum member or schema field.
The same context capability gate, deduplication and 20 KiB budget apply. Loading
it performs no Goal creation, Session selection, binding, acknowledgement or job
execution. Unknown keys on older Servers remain nonfatal/unsupported.
The base workflow contains only selection and existing-obligation reminders. Creation/checkpoint/controller/Wake recipes live in the optional chapter. Static recommended flows describe how a selected workflow works, not when every task must create one; current context owns the recommendation.
An MCP App binding proves a message channel, not that confirmation is unnecessary.
The two continuation presentation tools use static dedicated Direct descriptors;
their exposure does not enable unattended capability. After arming a card, produce
a normal final assistant response and let the current turn finalize promptly.
The card/tool result alone does not end the assistant turn. Observe readiness on
a later turn rather than waiting in the presenting turn.
The existing Agent production_auto_resume_available and Job terminal
automatic_resume_available booleans are conservative projections: an MCP App
needs the explicit unattended declaration and its existing exact live,
authorized binding. Push adapters keep their own independently declared capability.
Unknown/user-confirmed does not remove the App, withdraw bindings, block an explicit manual follow-up, or rewrite a pending delivery. Dispatch acceptance, Wake consume and fresh-turn observations retain their existing distinct meaning; a consumed Wake does not prove that the user did not click a confirmation.
Changing preference never completes/cancels a Goal, rotates an Endpoint, changes its generation, resends a Wake, acknowledges a message or retries a Job. Existing Goal/session correlations and closeout obligations remain queryable. No database migration, new scope, permission shortcut, schedule, or inferred identity is added.
Tests cover both Goal preferences and all three interaction declarations. They compare cached MCP inventories and full schemas byte-for-byte, exact manifest routes and App bindings, unchanged canonical outputs outside requested context, optional chapter capability/budget handling, explicit Goal lifecycle recovery, and conservative Agent/Job readiness without modifying durable records.
Run focused workflow, context, Agent continuation, Goal and Job terminal tests; keep the existing tool-list size/contract checks. No end-to-end claim about the Host's current confirmation UI can be made by these local regression tests.
Before an implementation PR claiming restored auto-resume, test the actual branch
with a real ChatGPT MCP App connection: about 30 seconds, about five minutes in
the foreground, and about five minutes in a background tab. Preserve timestamps
and logs for the original final response, durable wake readiness, mounted App
observation, ui/message acceptance, fresh model turn, usable tool runtime, and
exact consume. Verify no user click or duplicate wake/consume. Preserve any
previous Code Mode continuation is no longer available sequence without a
silent retry. Host behavior observed in another deployment is not branch acceptance.