Standalone VPS
In plain words: Reach deployment: Standalone VPS
A standalone restricted Reach on a VPS with its own database and services, plus the shared end-to-end contract for answering one public Discord question from a public docs corpus.
- 1No road to home data, models or credentials; guest/public questions only.
- 2The public corpus is fetched from pinned HTTPS sources, built offline and expires after 24 hours.
- 3Turn outcome and delivery outcome are recorded separately; unknown sends are never retried blindly.
Designed Acceptance target; current app cannot be exposed this way.
Words on this page, decoded click one for its card
One public Discord question is enough to test the entire restricted VPS body: event admission, corpus evidence, cognition, committed answer, external send, and recovery. reach.vps.public@1 owns that standalone deployment profile and end-to-end acceptance target.
The worked question also states the common turn and delivery chain used by the home-only and edge/home profiles. Those profiles keep their own placement, custody, and recovery boundaries.
The profile requires the separate service and authority boundaries below. Before deployment, check their implementation evidence; the current loopback application cannot be exposed as this VPS body. Exporting Discord material requires its own admission.
One restricted deployment
The VPS has its own VesselEngine Room, Workers, local WardSecurity Desk, and Phylactery for Core RunJob Record/WardSecurity Desk/queue and Reach truth. It has no road to home database, private ContextBriefing Pack, AltarControl Panel, model services, Podman, Reactor, host authority, reusable home credentials, or ambient SigilsID Badges. WardSecurity Desk may mint a secret-free task-scoped SigilID Badge after admission; it expires with the task and never crosses to a model or peer.
The baseline is outbound-only and guest/public-only, using one admitted Habitat/corpus and a question eligible for disclosure. It has no Tether, Veil, callback, inbound A2AAgent-to-Agent Line, Agent Card, private home data, enrolled caller powers, or dynamic discovery. Private ContextBriefing Pack, missing privacy boundaries, and greater authority refuse. Enrolled/private attachment is a later profile requiring delivered remote WardSecurity Desk and an exact private backend, never guild membership.
First E2E contract: one public Discord question
- Receive: edge validates application, guild, channel/thread, trigger, bytes, and adapter on an outbound-Gateway event.
- Reserve: atomically insert
DiscordEventAdmission@1under(platform, adapter revision, application id, event kind, external event id)and payload digest. Exact replay in the same Habitat/owner partition returns committed status; changed-content/cross-partition reuse is a security fault. - Admit: WardSecurity Desk maps guest scope under
(platform, application, guild, channel-or-thread, external-subject), with no retained personal history, then mints the task SigilID Badge. - Ground: select the active snapshot, bounded passages, and sealed evidence bundle.
- Form: exact PatternWorkflow/RunJob Record assembles labels and required Privacy Cut; missing lineage/verifier/Cut/receipt refuses remote formation.
- Admit egress: immediately before bytes, the trusted gate issues fresh
EgressDecisionbinding Principal/SigilID Badge, RunJob Record/attempt, provider/peer/destination/purpose, payload digest, labels, policy, transformation receipt, expiry, and budgets. Retry, fallback, redirect, resume, payload, actor, model, peer, or destination change needs another decision. - Call: persist
ServiceJobAttempt@1or the enrolled/task-authorized IntercomAgent-to-Agent Line task/outbox, thenSUBMITTINGbefore transmission. Adapter receives no SigilID Badge or undisclosed ContextBriefing Pack. - Quarantine: validate attributed return protocol/schema, size, terminal, correlation, citations, privacy, and output class before adoption.
- Commit: one transaction writes
ReachTurn@1andDiscordDeliveryIntent@1inPENDINGwith effect, digest, and deterministic nonce. Authenticated claim grants a generation-fenced lease; ledger persistsCLAIMED, thenSUBMITTING, before edge REST withenforce_nonce=true. Edge holds no database credential. - Settle: authenticated settlement writes
ReachDelivery@1with effect/digest, platform status, nonce, claim generation, and known message id. Expired pre-submit claims may be reclaimed under the same intent. After possible send, keepUNKNOWNand do not resend until independent evidence reconciles the effect.
Discord's Create Message reference describes nonce uniqueness only for “the past few minutes”; it supplies no bounded safe retry deadline. A future adapter may admit same-nonce, matching-payload retry only under an exact platform guarantee that excludes duplication for that attempt.
DiscordEventAdmission
-> Run / Pattern revision
-> PublicCorpusSnapshot + CorpusEvidenceBundle
-> Context lineage + Cut receipt + EgressDecision
-> ServiceJobAttempt or Intercom task/outbox
-> ReachTurn + DiscordDeliveryIntent
-> ReachDelivery
This binds event, turn, RunJob Record/station attempt, provider/A2AAgent-to-Agent Line request/task/message/idempotency identities, effect, digest, and Discord message. HTTP success or provider prose replaces none of those committed edges.
Keep the outcome of the turn separate from the outcome of sending it. ReachTurn@1 terminates as SUCCEEDED, REFUSED, DEPENDENCY_UNAVAILABLE, EXPIRED, FAILED, or INDETERMINATE; ReachDelivery@1 returns NOT_ATTEMPTED, KNOWN_SENT, KNOWN_REJECTED, or UNKNOWN.
The intent follows PENDING -> CLAIMED -> SUBMITTING -> KNOWN_SENT | KNOWN_REJECTED | UNKNOWN, with durable claims/generations/leases/attempts. A crash after submission may have left an external effect, so recovery cannot reclaim that work as unsent.
Enforced service and secret split
Provision a non-root, non-login host account and platform floor separately from Reach. ApplicationDeploymentManifest@1 pins every role as a distinct rootless unit/container with exact image, command, ordering, mounts, namespaces, ceilings, and secret files; Scribe alone materializes it. Shared Pods, environment, credentials, or writable volumes cannot replace typed ports/inboxes/outboxes.
| Service | May hold or do | Must not receive |
|---|---|---|
| Discord edge | bot token; outbound Gateway; outbound Discord REST; emit validated events; consume one-delivery intents | corpus, provider/peer credentials, policy authority, general database write, public listener |
| Reach core | turn policy; local task-scoped SigilID Badge; read-only active corpus; typed PhylacteryMemory Vault port | bot token, long-lived provider/peer bearer, arbitrary Internet, corpus staging |
| PortalCloud Model/A2AAgent-to-Agent Line egress adapter | exact provider/peer credentials and destinations; execute one egress-admitted attempt | bot token, SigilID Badge, raw private ContextBriefing Pack, dynamic routing, general proxying |
| Corpus refresher | allowlisted public-source network; bounded staging; atomic snapshot publication | bot/provider/peer credentials, application records, content-directed network |
| Local PhylacteryMemory Vault | Core RunJob Record/WardSecurity Desk/queue plus Reach records, outboxes, dedupe, checkpoints, and admitted migrations | public or Tether listener, home-database replication, ambient service access |
| IntercomAgent-to-Agent Line ingress, separate later profile | hostile decode; peer authentication; replay fence; bounded durable inbox | bot/provider credentials, Discord delivery path, direct work or effect authority |
| Veil, separate later profile | TLS, canonical ingress, exact route and coarse limit | application bearer, database, corpus writer, delivery authority |
| Tether, separate later profile | exact WireGuard peer and routes | default route, application credential, authorization decision |
Each egress instance serves one provider/peer trust class with only its credential reference and short-lived occurrence grant. Core supplies payload and decision id, never SigilID Badge or another bearer's credential.
Authenticate both ends of each local port using the manifest-pinned service Principals, credentials, audience, object/message types, expiry, replay fences, and receiver authorization. Discard identity supplied by the caller itself: loopback, shared bearers, DNS, and possession of a route establish no workload identity. This boundary must still reject cross-service impersonation when a non-owning service is compromised.
Firewall policy denies metadata/private-network egress except exact local service roads; later Tether needs another profile. This limits lateral movement without claiming resistance to root, operator-account, or VPS-control-plane compromise, which can expose all resident secrets and payloads.
Public corpus contract
Reach judges source eligibility, interpretation, selection, and citations. Acquisition follows Webcrawler; a checkout or static site alone is no retrieval system.
Start acquisition from canonical HTTPS Git/static sources only. Refuse git/SSH/SCP/local/file origins, credential helpers, and ambient credentials. Bind the source to pinned paths, an operator-admitted commit or verified immutable release provenance, digests, builder/parser/index revisions, and file/byte/expansion/depth/work ceilings. A moving branch may reveal a candidate but cannot activate it.
Process that candidate without hooks, submodules, smudge/LFS, or content-directed network. Reject escaping symlinks, unsupported media, malformed encoding, and archive/parser bombs. Build the index offline and validate all staging before atomically activating the snapshot. If any stage fails, keep the previous snapshot.
Record the admitted source in PublicCorpusSnapshot@1, retaining source/revision/digests, accepted paths, tools, build receipt, activation, and freshness. Its passages remain attributed, instruction-fenced data. The snapshot's fresh_until is 24 hours after activation; after expiry, return DEPENDENCY_UNAVAILABLE. An explicitly historical question may instead use a separately admitted frozen historical source, with that revision displayed.
CorpusEvidenceBundle@1 pins one snapshot, passage ids/digests, canonical URLs/sections, and retrieval/count/token/size limits. Only the bounded bundle can travel remotely. Missing, altered, or unbound citations refuse validation.
Outbound A2A without an inbound edge
The first independent interoperability receipt pins one A2AAgent-to-Agent Line 1.0 binding/adapter, enrolled peer, authentication, task, destination, and budgets. Advertised Agent Cards prove none of enrollment, authority, destination admission, or availability.
| Field | reach.vps.public@1 A2AAgent-to-Agent Line receipt |
|---|---|
| protocol | A2AAgent-to-Agent Line 1.0, HTTP+JSON binding, adapter and schema fixture digests pinned |
| peer | one pre-enrolled Principal, canonical HTTPS origin, Agent Card digest, server certificate identity, and task authorization named by the receipt |
| authentication | mutual TLS with distinct audience-bound client credential; no bearer in payload |
| task | reach.public_corpus_answer@1; one text query plus one CorpusEvidenceBundle@1; text/structured response only; files, artifact URLs, tools, teaching, and continuation refused |
| operations | non-blocking POST /message:send with configuration.returnImmediately=true, returning a Task, then GET /tasks/{id} only; a direct Message, stream, or push notification is outside this receipt |
| polling | every 2 seconds, at most 20 polls, 45-second absolute task deadline |
| ceilings | one task; 32 KiB request; 256 KiB response; eight evidence passages; 2,000-character query; profile-pinned token and spend ceilings |
| adoption | authenticated expected task/context identity, current peer authorization, first terminal, quarantine, schema/citation validation |
A2AAgent-to-Agent Line 1.0 makes Send Message idempotency optional; messageId alone does not prove deduplication. Before retrying an ambiguous initial POST, the receipt must admit the selected peer's guarantee that the exact same message and payload resolve to the original Task without duplicate work for that redelivery. Without that guarantee, preserve the uncertain task for reconciliation and do not resend. An admitted retry preserves the exact envelope and message/task identities; every physical attempt, including retries and polls, needs a fresh byte-time EgressDecision and consumes its transmission budget.
Replace each peer field with an observed independent endpoint; placeholders or same-process fakes prove conformance only. A model PortalCloud Model is a separate E2E case under the same egress/attempt/quarantine/delivery law.
Commit the task/outbox before sending, then park in Durable StasisPause while waiting. The baseline obtains updates through outbound response/polling and disables push callbacks. Authenticate and correlate each update against current authorization/revocation, and record the first authenticated protocol terminal. Even then, keep the returned content quarantined until validation and CompositionApp adoption.
Preserve the distinction between SUCCEEDED, REFUSED, FAILED, EXPIRED, REVOKED, CANCELLED, and LOST. Silence alone establishes none of these outcomes and cannot authorize a blind repeat.
Map TASK_STATE_COMPLETED, TASK_STATE_REJECTED, TASK_STATE_FAILED, and TASK_STATE_CANCELED to their respective success/refusal/failure/cancellation. One-shot work refuses TASK_STATE_INPUT_REQUIRED/TASK_STATE_AUTH_REQUIRED without new credentials. Local deadline, current revocation, or irreconcilable loss settles expiry/revocation/loss with evidence.
| Profile | Exact boundary |
|---|---|
| Callback-only client | Veil may route a notification only to isolated IntercomAgent-to-Agent Line ingress; it may update one existing outbound task after authentication, replay fencing, task/token correlation, current authorization, and durable admission. |
| Full A2AAgent-to-Agent Line server | A distinct server profile needs Veil, WardSecurity Desk, IntercomAgent-to-Agent Line durable inbox/outbox, Workers, quotas, and its own result path. A new peer task is not a Reach/Discord turn. |
An incoming peer task never creates a Discord delivery. Cards and task routes grant no foreign use of the bot identity.
Destination and abuse boundary
Admit canonical HTTPS origin/port/path/purpose without ambient proxy or credentials. Reject loopback, private, link-local, multicast, unspecified, metadata, and mixed-resolution addresses. Pin the admitted address through connection; peer, TLS, SNI, and Host must match. Re-admit each redirect/new connection.
Before Core sees a return, the egress adapter bounds status/type, headers, wire/expanded bytes and ratio, chunks/count/size, stream/idle time, JSON depth/items, parsing/tokens, and total result. Violation closes response and returns dependency failure without further parsing.
Set limits on platform events per application/guild/channel/subject, as well as concurrency, evidence/results, and tokens/time/retries/spend. A later ingress profile must additionally bound pre-auth connections, headers/compressed/expanded bodies, signature work, per-IP/peer/route/global quotas, durable queues/streams, and CPU/memory/process/disk/connections. Apply those limits so overload cannot displace heartbeat, committed delivery, or recovery work.
Retention and provider custody
These are maximums; shorter policy is allowed, longer retention needs a declared decision.
| Material | Maximum and retained form |
|---|---|
| raw Discord event/query | 24 hours after terminal; up to 7 days only while reconciliation is unresolved, then digest and minimum admission fields |
| caller/admission evidence | 30 days; partition, policy, decision and abuse facts without copied profile content |
| evidence bundle and every terminal turn | 30 days; structural terminal record plus exact selected public passages or their independently retrievable digests and refs |
| raw egress payload or quarantined return | 24 hours after terminal; up to 7 days for INDETERMINATE, then decision/result digests and receipts |
| delivery and external idempotency identities | 90 days; event/effect ids, payload digest, status, and Discord message id |
| edge address and coarse abuse log | 7 days, access-controlled and minimized |
| corpus snapshots | active plus previous generation; evidence retained with a turn remains separately bounded above |
Telemetry excludes raw prompts/passages/results, credentials, and pseudonym maps. Admit provider storage/training/region/subcontractor/deletion policy before egress; local deletion cannot erase its copies. Limits also cover replicas, exports, encrypted backups, VPS snapshots, journals, swap, and dumps. Disable raw payload/credential dumps/logs and encrypt or disable swap.
The manifest must choose a recovery policy: either disable backups and declare loss unrecoverable, or pin encrypted off-host backup/expiry/restore with an offline key. If PhylacteryMemory Vault is lost, disable Reach until effects inside the idempotency horizon have been reconciled. Starting with an empty database proves nothing about old Discord/A2AAgent-to-Agent Line effects. On decommission, destroy volumes and expire secondary copies.
Restart, uncertainty, and compromise
On replay, return the committed admission/turn. A failed corpus refresh preserves the earlier snapshot with degraded freshness. Recover remote work according to what the attempt record proves: a proved pre-submit failure may create a new attempt/egress decision, while possible post-submit failure remains INDETERMINATE until reconciliation. Parked A2AAgent-to-Agent Line survives through protocol identities/checkpoints, never SDK objects. An unknown Discord delivery needs independent evidence before any retry.
For a service compromise, revoke leases/credentials, quarantine output, mark tasks/deliveries as tainted, and preserve bounded secret-free correlation. A root/operator/VPS-control-plane compromise requires rebuilding the body. Stop Reach and withdraw routes/callback DNS/cards, then revoke every potentially exposed Discord/provider/A2AAgent-to-Agent Line/Tether/Veil/ACME/operator/source/deployment credential. Mark and reconcile uncertain external effects before destroying and reprovisioning from a trusted pinned image.
Restore only independently verified non-secret records. Rebuild the corpus, issue disjoint credentials, and enroll from zero authority before returning the body to service.
Acceptance gates
Tests cover identity/digest collision, replay/partition isolation, Cut/egress binding, destination/redirect rebinding, malicious corpus/path/parser and compressed/chunked/deep return cases, timeout at each commit, quarantine/revocation, restart/overload, and nonce/claim expiry without duplication.
To assess the deployed body, the live-host receipt must identify source/images, OS/systemd/Podman/users, manifest/compiler, units/mounts, local mTLS Principals/credentials and impersonation refusals, network/firewall/DNS, secrets/resources, corpus, MirrorPersona Keeper/WardSecurity Desk, and external adapters. It must also account for reboot, secret isolation, backup/restore or loss, reconciliation, shutdown, and clean rebuild/rotation. Only the evidence owners and State can use that evidence to promote delivery.