Skip to main content
Version: Development

Phase 3 management integration (#226)

Hosted startup investigation​

The first contracts attempt at source 075db884 failed when a bounded Git status probe timed out. Its single rerun instead reached the real node/provider workflow and failed with node-startup-exit after fixture export. Neither failed run is accepted as a green gate or silently retried. The shared process owner now exposes only an allowlisted node stage/status code, never raw stderr, credentials or paths, so the next exact-head run can distinguish configuration, startup and shutdown failures. This is diagnostic coverage, not a claim that the startup failure's root cause has been fixed. Local successful workflows remain separate evidence.

The subsequent run at 1c9198ef passes the complete contracts/provider workflow, catalog, SDK, documentation, registry and security jobs. Its Rust job instead identifies oversized shared test-startup futures after the provider/assets merge. The startup allocation boundaries are boxed in 0af1589e, without a lint waiver or a change to request execution. Strict Linux node Clippy passes with that same fix integrated at 26751357; the next hosted PR head must still pass every job. The earlier intermittent startup exit remains recorded rather than relabelled as resolved by this independent lint fix.

This delivery extends the existing authenticated management services. It does not change the policy language, manufacture provider registrations, or turn a receipt or inspection response into execution authority.

Finite CLI operations​

Use the existing protected client profile (latent --config client.json). The profile tenant is an assertion; the server derives the effective tenant and actor from the authenticated transport principal.

CommandSupported operation
policy apply/get/list/revoke/operation/explainExisting typed capability policy and provider-binding records
trigger apply/get/list/delete/operationClosed buffered HTTP trigger profile; exact publication, deployment revision and generation
capability list --deployment IDOne bounded page of sampled bindings and tenant usage
capability explain --deployment ID --capability CONTRACT --operation OP --resource FILEDescriptive current-principal inspection, not admission
web publish/get/operation/revoke/retire/renew-evidence/prepareExact componentless web publication and lifecycle; optional finite shared preparation, never execution permission

Trigger mutation requires all three explicit comparison fields:

latent --config client.json trigger apply trigger.json --operation-id trigger-create-1 --expected-generation 0 --expected-state-version 0
latent --config client.json trigger operation trigger-create-1
latent --config client.json capability list --deployment renderer --include-node-usage --page-size 16

The trigger file uses the existing Trigger manifest codec, including its explicit publication selector. Component-only selectors, future trigger profiles, unknown resource fields and impersonation claims are rejected. List commands fetch only the requested page. They do not retry, follow cursors, or poll. include-node-usage remains subject to server-side operator authorization.

Successful trigger responses are checked against the operation ID, authenticated scope, exact target, generations, receipt digest, and audit acknowledgement. Ambiguous durability remains unknown. An operation lookup is a separate explicit command; an absent operation is not evidence of rollback. All diagnostic 64-bit counters and generations are JSON decimal strings. Capability output always reports executionPermission: false; a sampled allow is not an executable grant.

Trigger object generations are catalog-assigned versions, not per-object counters. Apply returns the newly committed state version as the object's generation; Delete retains the removed object's positive generation while advancing only the catalog state. CLI receipt and deletion-metadata validation preserves those existing server semantics, including retained replay. The actual T1 workflow exposed the previous counter assumption after several deployment changes; focused red/green tests cover creation, replacement and deletion across unrelated catalog writes. Invalid responses still leave the mutation outcome unknown and never cause an automatic retry.

Invocation keeps the Phase 1 budget grammar by default. Use invoke --budget-profile phase3 --budget budget.json for the delivered child-call, outbound-request and blob byte dimensions. State/effect dimensions remain unsupported. This option only validates requested amounts; the node still selects its actual accounting profile and independently intersects authority and resource ceilings.

Validation and qualification boundary​

The focused CLI and wire management tests cover closed input grammar, response scope/receipt associations, unknown-resource rejection, finite pagination, lossless 64-bit values and uncertainty. They do not substitute for a real separate client/node workflow.

The provider real-node runner is tools/run_phase3_management_workflow.py, using the existing phase2_operator_process and phase2_operator_scenario ownership helpers. Guest inputs remain the real HTTP/blob examples under tools/toolchain-smoke/examples/guest_http and guest_blob, produced by tools/build_guest_capsules.py; the existing web_contract example supplies the public HTTP-trigger contract. The provider bootstrap and shared fixture contract documents SDK reuse without copying node setup or provider implementations. This initial runner deliberately reports HTTP/blob scope, not completed web/trigger or Angular acceptance.

The bounded provider evidence records the actual Linux run: 31 separate CLI operations, four authorized upstream requests, denied-path and revoked-grant checks, exact revision preservation on restart, and joined node/provider owners with zero live activation/handle/work counters. Two independent workflow executions passed. The receipt retains durable blob staging inventory and the audit restart's unknown historical-loss flag rather than claiming either was erased.

Angular remains gated to the delivered T0 runtime until the actual #234 build has passed protected T1 configuration, enforced publisher/builder/SBOM admission, isolated native compilation, authenticated cache reuse, exact selected publication deployment/render, cancellation/reclamation, restart, cross-tenant denial and independent publication/policy revocation. T2/T3 are not supported. The immutable-assets and response-cache work in #336/#335 is a dependency, not an implementation copied into this change. Full #226 acceptance is not yet claimed by this milestone.

Selected web execution projection​

The concrete catalog now projects an exact SSR web publication into the common preparation metadata and lifecycle interface. This is not a capsule publication: the capsule index retains executable content identity, while publication management requires an exact scoped reference. No AdmissionGrant is created from web receipts or digests. The sealed projection retains the actual web grant, its originating catalog and admission authority, the exact package/assets association, and its current lifecycle generation. Browser-only packages cannot acquire this projection.

Immutable cache identity includes the selected publication and its derived metadata. Two packages sharing renderer bytes retain independent authority; renewal can reuse immutable bytes but cannot reuse the old start grant. Historical recovery verifies actual renderer bytes even for denied publications. Active proofs retain their bounded read charge until the last consumer releases them. Focused storage tests cover independent revocation, renewal, restart, foreign catalogs sharing an authority, tenant denial, pre-reserved reads and tampering. These tests use an explicitly injected storage-test authority, not fabricated Angular build evidence; protected T1 execution still requires the full gate above.

The additional actual Angular workflow consumes the maintained #234 builder's bytes and observation. Its exporter now passes publisher/builder/SBOM verification with the real system clock; it does not relabel the Angular recipe or claim reproducibility. The retained run now passes protected T1 admission, isolated compilation, actual selected rendering, cancellation/reclamation, independent revocation and authenticated cache reuse after restart. The runtime permits this explicit protected T1 profile while retaining the closed engine shape and enforced admission/compiler owners. Real-browser hydration, backend-during-render and true staged web canaries remain separate parent-owned qualification, not claims of this #226 receipt.