# Source Plan Migration Ledger ## Purpose This ledger records how worker-related documents from the RSMon control-plane repository were converted. The source plans are historical input, not runtime authority. Their worker-owned requirements now live in this repository's implementation documents; control-plane-owned requirements stay in RSMon. Conversion date: 2026-07-13. ## Direct Worker Documents | Former RSMon document | Worker implementation document | Resolution | | --- | --- | --- | | `docs/new-worker.md` | root `README.md`, `architecture.md`, `private-workers.md` | Replaced monorepo commands with standalone binary/container/systemd operation | | `docs/worker-container.md` | root `README.md`, `implementation-roadmap.md` | Distribution ownership moved here; production image tags retained | | `docs/worker-http-settings.md` | `web-console-and-observability.md`, root `README.md` | Current port/auth behavior retained; Compose-only `WORKER_BIND_IP` clarified | | `docs/worker-protocol.md` | `control-plane-protocol.md` | Current tagged task envelope is normative; stale jobs/results envelopes rejected | | `docs/worker-cluster-quickstart.md` | `critical-check-cluster.md` | Existing cluster scaffold separated from unimplemented critical engine | | `docs/rsmon-distributed-api-plan.md` | `architecture.md`, `control-plane-protocol.md`, `implementation-roadmap.md` | PostgreSQL normal path retained; Redis/Rabbit/NATS queue proposal superseded | | `docs/plans/worker-notifier-mvp.md` | `tasks-and-notifications.md` | Final `task_envelope` and credential implementation supersede older sibling-field drafts | | `docs/sessions/monitor-transfer-and-admin-workers.md` | `architecture.md`, `private-workers.md` | Historical operator/session decisions reduced to current ownership and account-isolation rules | ## Distributed Plans | Former RSMon document | Worker implementation document | Resolution | | --- | --- | --- | | `docs/distributed/notifications-from-worker.md` | `tasks-and-notifications.md`, `private-workers.md` | Implemented methods/statuses recorded; old credential assumptions replaced | | `docs/distributed/private-workers.md` | `private-workers.md` | Scheduler isolation marked current; bootstrap, signed config, and mTLS remain explicit work | | `docs/distributed/network-diagnostics.md` | `network-diagnostics.md` | Current confirmation separated from future rich diagnostic tasks | | `docs/distributed/worker-to-worker-raft.md` | `critical-check-cluster.md` | Converted to package-specific ordered implementation and release gates | | `docs/distributed/critical-check-amendments.md` | `critical-check-cluster.md` | No-leases, four-quorum, external-witness, and commit-before-notify rules made normative | | `docs/distributed/worker-web-app.md` | `web-console-and-observability.md`, `inventory.md` | Existing console recognized; future OAuth/Compose/hardware scope split into staged work | ## Inventory And Host Documents | Former RSMon document | Worker implementation document | Resolution | | --- | --- | --- | | `docs/inventory-management.md` | `inventory.md` | Control-plane projection retained as dependency; worker owns collection only | | `docs/plans/inventory-management.md` | `inventory.md` | deploymentd and worker reports defined as source-aware complementary producers | | `docs/parity/rstuff-inventory.md` | `inventory.md` | Historical only; RSMon owns inventory and RSLogin supplies project/access input | | `docs/parity/deploymentd.md` | `inventory.md` | deploymentd parity becomes fixture normalization and comparison gate | | `docs/deploymentd-replay-rollout.md` | `inventory.md` | HTTP nonce rollout remains deploymentd-specific; worker uses authenticated typed reports | | `docs/integrations/rstuff-inventory-stream.md` | `inventory.md` | Superseded; no rstuff service is planned and Valkey is not the target inventory authority | | `docs/plans/servers-and-hardware-metrics.md` | `web-console-and-observability.md`, `inventory.md` | Implemented server metric report retained; local hardware extensions staged | | `docs/server-observability.md` | `web-console-and-observability.md`, `control-plane-protocol.md` | Current wire fields, ownership validation, and TSDB boundary retained | | `docs/parity/capture.md` | `web-console-and-observability.md`, `implementation-roadmap.md` | Worker-host coverage gaps converted into staged collector work | ## Diagnostics, Policy, And Product Documents | Former RSMon document | Worker implementation document | Resolution | | --- | --- | --- | | `docs/network-diagnostics.md` | `network-diagnostics.md` | Implemented confirmation/quarantine baseline retained | | `docs/plans/network-diagnostics-partial.md` | `network-diagnostics.md` | Partial implementation folded into explicit rich-task phases | | `docs/notification-task-delivery.md` | `tasks-and-notifications.md`, `control-plane-protocol.md` | Durable queue remains control-plane-owned; attempt execution remains worker-owned | | `docs/notification-credentials.md` | `tasks-and-notifications.md`, `private-workers.md` | SMTP/Telegram current scope retained; webhook/Mattermost gaps explicit | | `docs/billing-and-entitlements.md` | `private-workers.md`, `implementation-roadmap.md` | Entitlement remains a control-plane gate, never trusted from worker config | | `docs/plans/public-checks.md` | `private-workers.md`, `implementation-roadmap.md` | Public tasks use a separate safe grant, not widened account access | | `docs/plans/plans-and-billing.md` | `private-workers.md` | Plan eligibility remains control-plane policy | | `docs/check-kinds.md` | `tasks-and-notifications.md` | Worker-supported executor list tied to `internal/checkexec` | | `docs/plans/uptimerobot-parity.md` | `implementation-roadmap.md` | Worker-owned parity dependencies ordered by security prerequisites | | `docs/plans/krasichka.md` | none | External Krasichka runtime is not a feature of this worker binary; only protocol compatibility applies | ## Operations And CI Documents | Former RSMon document | New authority | Resolution | | --- | --- | --- | | `docs/local-processes.md` | root `README.md` | Standalone development commands replace monorepo process instructions | | `docs/ci.md` | `.github/workflows/*.yml`, `implementation-roadmap.md` | Worker image build is owned by Gitea Actions here | | `docs/CI_QUICKSTART.md` | root `README.md` | Standalone make, Docker, and Compose commands are authoritative | ## Resolved Conflicts ### Protocol Old plans used `type: jobs/results`, separate notification siblings, and version-string feature detection. Current code uses `kind`, explicit branches, `task_envelope`, exact lease tokens, and explicit capabilities. The current model is authoritative. ### Queue Ownership Normal task ownership is PostgreSQL with `FOR UPDATE SKIP LOCKED`. Redis Streams, RabbitMQ, and NATS are not worker dependencies. The critical path is dispatchless Raft and cannot reuse normal leases. ### Credentials SMTP and Telegram use scoped pushed credential lists. Webhook and Mattermost are not yet equivalently persisted per account. SMS and voice are unsupported. No document may claim universal per-account provider isolation before those gaps close. ### Web Console The console exists on port 27401 with Basic auth or local bcrypt. The former draft's port 7401, OAuth-first behavior, and entirely unimplemented status are obsolete. Collector lifecycle remains a real implementation gap. ### Inventory deploymentd HTTP ingest is currently implemented on the control plane. Worker inventory is local/partial and has no upstream report yet. RSMon is the target inventory authority; RSLogin supplies trusted project and SSH-access input. Future worker and deploymentd reports are complementary source-scoped inputs; neither may erase the other's observations. ### Private Workers And Public Work Private workers are account-restricted. Public cross-account checks require a separate signed and SSRF-safe grant. Empty account scope continues to mean a platform-operated worker and must never be customer-selectable. ### Raft Maturity Membership, persistence, snapshots, transport, and placeholder FSM entries exist. Production `distributed_critical` behavior does not. The control plane is an external witness, never a voter; provider calls remain outside Raft. ## Maintenance When a new RSMon plan adds worker behavior, update this ledger and one concrete implementation document in the same change. Do not copy a planning draft into this repository without reconciling it against current packages, wire types, security boundaries, and tests.