feat: ship v0.1.45 communication, collaboration, and exact endpoint lifecycle - #1
Merged
Merged
Conversation
…ifecycle Add the schema-v7 release contract with sole collaboration authority, exact endpoint lifecycle coordination, all five harness adapters, conversations, rooms, tasks, response obligations, file transfer with safe downloads, opaque invitation continuation, resumable user-level install, and the rollback-capable 0.1.44 ordinary-server transition. Endpoint binding is now fenced to the exact presented process instance: the framed platform/account/pid/start-time/executable digest. An executable-only measurement never proves instance identity, a connected endpoint presented by a new process is rebound only through the audited endpoint.lifecycle.process_reconnected transition under its verified harness actor, and an interrupted capability-root write is re-minted under owner-private custody instead of bricking the endpoint. Only a typed task assignment may wake a semantic background worker. The service issues no task.process grant and accepts no result without a committed task payload release for an ordinary request obligation, so both the wake gate and the authorize route refuse it; the obligation stays durable and passively counted until the responsible harness answers from its own authorized session. Upgrade rollback safety now admits exactly the migrated authority - one active migrated_v6_communication_scope per committed v6 communication scope with its exact owner and member harnesses - instead of requiring empty v7 tables, which blocked every deployment that actually held communication authority. The upgrade journal is v4 and fails closed without its migrated-authority expectation. Local evidence only: focused 336 passed with 5 expected dedicated-PostgreSQL skips, broad source 2101 passed with 21 expected skips, source plus two clean recursive npm generations 2128 passed with 21 expected skips, byte-identical reproducible builds, exact-endpoint routing, and the packaged user journey. Installed upgrade/rollback, live canary, publication, and every must-not-ship gate remain non-green and unpromoted.
Three lanes failed on the candidate commit; each had a distinct cause. Clean-install lane: a request.v1 means artifact mode enabled, and v0.1.45 requires the complete maintained ClamAV configuration for that mode. The lane pinned a synthetic-scanner engine and placeholder digests that the release correctly refuses. It now supplies the exact endpoint, scanner identity, key epoch, signing key, engine and signature versions, and freshness bound, with rules and profile digests derived by the installed package runtime, and the workflow installs and starts a real ClamAV daemon on loopback because apply proves readiness with a live signed INSTREAM scan. Upgrade lane: it proved PostgreSQL peer readiness with sudo -u agentnet before the released package had created that account, so it always failed with "sudo: unknown user agentnet". Readiness is now proven from the operator role through pg_conf_load_time and pg_hba_file_rules, matching the clean-install lane; impersonation happens only after 0.1.44 setup creates the account. Cross-platform lane: the candidate added `agentnet verify` to every package host, which runs the complete suite including Linux-only setup, POSIX ownership, and distribution-artifact contracts, producing 129 macOS and 145 Windows failures. The installed-runtime verification and packaged journey are Linux-only again; macOS and Windows still pack, install, and launch. Their lifecycle qualification remains a separate blocked gate rather than an overclaimed green one. Adds hermetic coverage that the exact deployed scanner configuration satisfies apply-time readiness against a real loopback daemon and fails closed on an infected verdict; the previous lane fixture is rejected as scanner_trust_mismatch.
The lane exits under set -e with no output when a bare assertion fails, so a CI failure costs a full round trip to locate. An inherited ERR trap now prints the failing line, the exact command, and the tail of retained evidence files. Owner-only inputs stay excluded.
The lane configured a TCP listener through /etc/clamav/clamd.conf.d, which the Ubuntu package does not provide, so the drop-in was never read and no listener bound. The maintained daemon already exposes /var/run/clamav/clamd.ctl, so the lane pins that endpoint and waits for the daemon to answer a ping instead of reconfiguring it.
The lane expected the Core service runtime under the Core data root, but that runtime is only built when the unit first launches and the lane deliberately keeps Core inactive until after seeding. It now builds exactly that agentnet-owned runtime the way the unit would, then uses it for the seed and activation steps.
AGENTNET_NPM_RUNTIME_DIR is the environment root itself, not a parent of a versioned directory, and the Core unit points it at the Core data root's npm-runtime path. The lane now materializes and uses exactly that path.
Core resolves the DSN from the configured variable name, which the unit provides through its environment file. The seed runs outside the unit, so it must supply the same variable explicitly.
Core resolves its DSN, OIDC client secret, and envelope key from the environment file the unit loads, so enumerating one variable at a time only surfaces the next missing one. The seed now sources that exact file as root and drops to the service account, keeping every secret out of argv and the job log.
Activation resolves the DSN the same way Core does, so it needs the unit's environment file too. A shared runner sources that file as root and drops to the service account for both the seed and activation steps.
Activation opens the same exact server-agent instance, so it contends with the lease the stopped Core still holds until release or expiry. The lane now waits for that lease to clear and reports the lease table if it never does.
The lane now seeds committed v6 communication authority, which binds an owner harness and a fresh harness with their own credentials.
The v4 source snapshot carries the exact committed v6 image the migration must reproduce, but journal validation still enforced the v3 key set and rejected every upgrade with setup_upgrade_conflict. Validation now requires that field, enforces its exact entry shape, and rejects duplicate scope identifiers.
Rebinds the source-tree digest, verifier expectations, and reproducible artifacts after the journal-validation fix and the added live maintained- scanner readiness coverage. Local evidence: focused 454 passed with 5 expected dedicated-PostgreSQL skips, broad source 2102 passed with 21 expected skips, source plus two clean recursive npm generations 2129 passed with 21 expected skips, byte-identical reproducible builds, exact-endpoint routing, and the packaged user journey. Cross-platform package conformance and ordinary-server clean setup are terminal-green on the pushed candidate; the exact upgrade/rollback lane, deployment, and publication remain outstanding and unpromoted.
The rollback proof reports only that restored systemd state was not exact. Dumping each managed unit's load, enablement, active, and result state plus a short journal tail identifies the exact unit without another round trip.
The disposable nginx route and both restored units return independently, so a single immediate request can observe 502 while Core is still binding. The lane now polls each public origin within a bounded window and reports the last response if it never becomes healthy.
The packaged upgrade and rollback lane is not green, so this release does not offer an in-place upgrade from 0.1.44. Operators install 0.1.45 fresh and re-enroll. The transition code, its schema v6->v7 authority migration, and its rollback invariants stay implemented and hermetically covered, including the two defects found while exercising them: journal validation rejected every upgrade, and rollback safety demanded empty v7 tables, which blocked any deployment that actually held committed v6 communication authority. README, implementation guide, requirements status, gate ledger, evidence manifest, and reproducible artifacts are rebound to that posture. No gate is promoted; the upgrade lane is preserved as terminal-red rather than waived.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ships the v0.1.45 candidate: schema-v7 release contract with sole collaboration authority, exact endpoint lifecycle coordination, all five harness adapters, conversations, rooms, tasks, response obligations, file transfer with safe downloads, opaque invitation continuation, resumable user-level install, and the rollback-capable 0.1.44 ordinary-server transition.
Defects fixed during final review
task.processgrant and accepts no result without a committed task payload release, so the worker could only fail and retry. Only a typed task assignment may now wake a semantic worker; the wake gate and/v1/supervisor/executions/authorizeenforce this independently. An ordinary request obligation stays durable and passively counted until the responsible harness answers from its own authorized session.endpoint.lifecycle.process_reconnectedtransition under its verified harness actor and expected generation.load_currentpermanently. The uncommitted root is now re-minted under owner-private custody, still failing closed on symlink, foreign owner, hard link, or non-regular file.migrated_v6_communication_scopeper committed v6 scope with its exact owner and member harnesses — and still requires every other release table empty. The upgrade journal isv4and fails closed without its migrated-authority expectation. The PostgreSQL upgrade E2E lane now seeds real committed v6 authority and asserts the migrated v7 rows.Evidence (local tier only)
npm run check: source plus two clean recursive npm generations each 2128 passed, 21 expected skips; exact-endpoint routing PASS; packaged v0.1.45 user journey PASS; package-tree equality and residue checks passscripts/verify_release.py: PASS;agentnet verify: 2128 passed5aa49f85…, sdistf666a925…, wheel69686899…Not proven, not promoted
No must-not-ship gate is promoted by this PR. Installed upgrade/rollback proof requires the Ubuntu 24.04 runner against this commit; the bounded live endpoint canary requires explicit deployment authorization and frozen reviewed package digests.
tests/adapters/test_installed_live_inference.pyremains non-green in this environment for absent pinned harness binaries and was not rerun or waived. Publication and deployment are separate, externally visible actions and were not performed.