Skip to content

feat: ship v0.1.45 communication, collaboration, and exact endpoint lifecycle - #1

Merged
misunders2d merged 18 commits into
mainfrom
feat/v0145-communication-release
Aug 6, 2026
Merged

feat: ship v0.1.45 communication, collaboration, and exact endpoint lifecycle#1
misunders2d merged 18 commits into
mainfrom
feat/v0145-communication-release

Conversation

@misunders2d

Copy link
Copy Markdown
Owner

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

  1. Non-completable semantic-worker wake. The wake gate admitted ordinary request obligations into the clean-worker dispatch, but the service issues no task.process grant 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/authorize enforce this independently. An ordinary request obligation stays durable and passively counted until the responsible harness answers from its own authorized session.
  2. Executable-only process fencing. A connected endpoint whose stored measurement was the executable digest let any same-executable process obtain a fresh descriptor. Endpoints are now fenced to the exact framed platform/account/pid/start-time/executable instance digest, and a new process is rebound only through the audited endpoint.lifecycle.process_reconnected transition under its verified harness actor and expected generation.
  3. Bricked capability root. A crash between capability-file creation and digest commit left an orphan that failed load_current permanently. The uncommitted root is now re-minted under owner-private custody, still failing closed on symlink, foreign owner, hard link, or non-regular file.
  4. Upgrade blocked by its own invariant. Post-migration rollback safety required every v7 release table to be empty, so any 0.1.44 deployment that actually held committed communication authority could not upgrade at all. It now admits exactly the migrated image — one active migrated_v6_communication_scope per committed v6 scope with its exact owner and member harnesses — and still requires every other release table empty. The upgrade journal is v4 and 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)

  • focused lane: 336 passed, 5 expected dedicated-PostgreSQL skips
  • broad source: 2101 passed, 21 expected skips
  • 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 pass
  • scripts/verify_release.py: PASS; agentnet verify: 2128 passed
  • reproducible builds byte-identical: source tree 5aa49f85…, sdist f666a925…, wheel 69686899…

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.py remains 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.

…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.
@misunders2d
misunders2d merged commit 4bc4896 into main Aug 6, 2026
13 of 14 checks passed
@misunders2d
misunders2d deleted the feat/v0145-communication-release branch August 6, 2026 13:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant