{
  "summary": "Implemented owner-side input-path serving over the existing authenticated rc attach stream. No broker/msg/brain/API/MSG_OUT guard edits; no validation commands run as instructed.",
  "files": [
    "crates/spt-net/src/net/attach.rs",
    "crates/spt-daemon/src/attach.rs",
    "crates/spt/src/rc.rs",
    "crates/spt-daemon/src/servehost.rs",
    "crates/spt-store/src/serving.rs"
  ],
  "integration_requirements": [
    "Brain::complete_input_paths(&InputPathReply) is called by serve_attach on same-stream controller replies.",
    "msg::KIND_USER_INPUT_PATHS must carry InputPathRequest in BrokerEvent::Other; actual Controller role gates forwarding and completion.",
    "ServeResult::Missing is new; parent must update the exhaustive serveverb.rs match.",
    "InputPathRequest, InputPathResult, InputPathOutcome, InputPathReply are public in spt_net::net::attach, with agreed fields and Serialize/Deserialize/Clone/Debug/PartialEq/Eq.",
    "ServeRequest::AddInputReference { path: PathBuf, receipt_id: String, audience: String, received_at_ms: u64 } uses existing daemon RPC."
  ],
  "behavior": [
    "Rc derives audience from canonical_wire_id of its locally established target. Viewer and local/loopback paths decline by name; wire request cannot choose audience.",
    "One LazyLock process-wide worker, bounded request/result channels (8), maximum existing five paths, five-second queue-inclusive processing deadline and one-second per-RPC bound. Reply receiver belongs exclusively to the originating pump, preventing delivery to replacement streams.",
    "After an RPC timeout, worker declines queued work and closes permanently: prevents the existing timeout RPC helper from accumulating abandoned transport threads.",
    "Missing source returns typed Missing with no output; invalid metadata/path, registry failures, scope conflicts and expiration remain named.",
    "Registry mutation is under existing servehost lock. Same-audience live input references return unchanged entries/deadlines; unrelated or other-audience registrations cannot be rescoped. Fresh receipts can replace expired same-audience input references before the periodic reaper.",
    "Per parent direction, registration timestamp is min(received_at_ms, owner now); fixed existing 24h TTL. Original receipt replay cannot renew its retained expired entry."
  ],
  "tests_added": [
    "servehost::tests::input_reference_missing_is_a_silent_skip_without_registry_publication",
    "servehost::tests::input_reference_replay_preserves_the_live_entry_and_deadline",
    "servehost::tests::input_reference_cannot_rescope_another_audience_or_unrelated_entry",
    "servehost::tests::input_reference_expiry_cannot_be_renewed_by_replay_before_or_after_reaping",
    "servehost::tests::input_reference_clock_skew_never_extends_either_nodes_lifetime",
    "servehost::tests::input_reference_http_reads_observe_edits_and_deletion",
    "rc::tests::input_paths_require_remote_control_and_use_the_local_target",
    "rc::tests::declined_input_paths_remain_receipt_bound_and_bounded"
  ],
  "tests_updated": [
    "net::attach::tests::records_round_trip_and_unknown_kind_is_skipped includes both additive records and all input-path outcomes."
  ],
  "verification": "No builds/tests/linters/formatters executed per assignment. Edit tool parsed resulting source without syntax warnings after correcting one transient hunk mistake. LSP unavailable in exposed tools; narrow grep reference searches used."
}