Skip to content

docs(mc-host): document managed lifecycle architecture - #67

Draft
ahrav wants to merge 1 commit into
stack/mc-host-18-ci-dependency-warmupfrom
stack/mc-host-19-docs-tracking
Draft

docs(mc-host): document managed lifecycle architecture#67
ahrav wants to merge 1 commit into
stack/mc-host-18-ci-dependency-warmupfrom
stack/mc-host-19-docs-tracking

Conversation

@ahrav

@ahrav ahrav commented Aug 26, 2026

Copy link
Copy Markdown
Owner

Summary

Documents the shipped ck-mc-host lifecycle owner, fixed three-component composition, immutable Broca closures, managed demand behavior, CLI commands, and Synapse package contract. Commits the Beads task export used for this work.

Generated machine-specific mc-host qualification evidence is now ignored:

  • docs/evidence/mc-host-installed-release-evidence.json
  • docs/evidence/mc-host-release-qualification.json
  • docs/evidence/mc-host-synapse-smoke.json

Verification

  • Beads JSONL parses
  • bun run test:release: 136 passed
  • cargo test -p mc-host --test protocol_vectors: 18 passed
  • git diff --check

Stack

Layer 9 of 9 above #46. Parent: #66.

@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Comment @coderabbitai help to get the list of available commands.

@claude

claude Bot commented Aug 26, 2026

Copy link
Copy Markdown

Review summary

This PR is docs + generated task-tracking data only (.beads/issues.jsonl, .gitignore, ARCHITECTURE.md, STRUCTURE.md, docs/mc-host-wire-protocol.md, docs/synapse-model-bundle.md) — no application code changed, so there's nothing new to assess for runtime bugs, security, or performance in this diff itself. Checked for accidentally-committed secrets in the beads export (task notes mention "secret redaction" as a feature, not an actual leaked value) — none found.

Doc-quality notes below (left as inline comments too):

  1. docs/mc-host-wire-protocol.md §7.6 heading vs. content — the section is still titled ### 7.6 \host.shutdown`but now documentshost.statusfirst. The §7.4 cross-reference list also cites(Section 7.6)forhost.shutdownbut gives no section pointer forhost.status`, even though it lives in the same section. Minor navigability nit.
  2. Broadened unavailable fallback-reason semantics — the old text distinguished dynamic unavailability (provider Recovering/Quarantined, admission pressure) from permanent absence (which selected TCP with no reason), and described a client "automatic re-upgrade probe" that could retry a non-TCP candidate after unavailable. This PR replaces both with a single flat definition ("no installed provider serves an offered non-TCP transport") and deletes the re-upgrade-probe paragraph entirely, with no leftover references. Since this is a docs-only PR, please confirm this matches the already-shipped client/host behavior (i.e., the re-upgrade probe was actually removed from the implementation, not just from the docs) rather than the doc silently dropping a real capability.

Everything else (payload_manifest_digest now required + validated, the two-lock lifetime-fence model, the daemon_ver length-prefix added to the HMAC proof preimage, credential_fingerprints, the new host.status operation, and the synapse-model-bundle.md pinned-model/tolerance additions) reads as internally consistent with the rest of the document.

@@ -518,7 +531,23 @@ Both languages MUST produce identical bytes: UTF-8 pass-through for non-ASCII, t

### 7.6 `host.shutdown`

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section heading is still ### 7.6 \host.shutdown`but now documentshost.statusfirst (lines 534-543) before getting tohost.shutdown. Consider retitling to ### 7.6 `host.status` and `host.shutdown`so the heading matches the content, and so a reader scanning the TOC/section list can findhost.status`'s home.

### 7.4 Operation classification

`route.open`, `catalog.list`, `host.shutdown` (Section 7.6), and `transport.negotiate` (Section 7.7) are the only required channel-0 operations. Every other operation receives terminal `unsupported_operation`; host stays connected if framing remains valid. `transport.activate` and `transport.commit` are candidate-channel-only (Section 7.7): on a bootstrap connection they are unrecognized operations and receive terminal `unsupported_operation` like any other. A client health operation MUST NOT proxy handler health, which remains host-internal.
`route.open`, `catalog.list`, `host.shutdown` (Section 7.6), `host.status`, and `transport.negotiate` (Section 7.7) are the only required channel-0 operations. Every other operation receives terminal `unsupported_operation`; host stays connected if framing remains valid. `transport.activate` and `transport.commit` are candidate-channel-only (Section 7.7): on a bootstrap connection they are unrecognized operations and receive terminal `unsupported_operation` like any other. `host.status` reads the last completed host-owned health snapshot; it never invokes a handler callback on the requesting connection and exposes only closed component states and sanitized metrics, never handler detail text.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

route.open, catalog.list, and transport.negotiate each cite their defining section in this sentence, and so does host.shutdown (Section 7.6), but the newly-added host.status has no section pointer even though it's documented in that same Section 7.6. Suggest host.status (Section 7.6)`` for consistency.

| `reason` | Meaning |
| --- | --- |
| `unavailable` | an installed, statically eligible non-TCP offer is dynamically unavailable: provider readiness (`Recovering`/`Quarantined`) or admission pressure. Permanent absence of a provider and statically ineligible offer parameters are NOT `unavailable`; they select TCP with no `reason` |
| `unavailable` | no installed provider serves an offered non-TCP transport |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This flattens the previous distinction between dynamic unavailability (provider Recovering/Quarantined, admission pressure) and permanent absence (previously: selects TCP with no reason at all), and the paragraph below no longer mentions the client's "automatic re-upgrade probe" that used to be authorized specifically by this unavailable reason. Since this is a docs-only PR, can you confirm the re-upgrade-probe behavior was actually removed from the client/host implementation (in an earlier layer of this stack) rather than just undocumented here? If the probe still exists in code, this doc change would silently misdocument real behavior.

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