You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implements the dual-stack tasks/* facade decided in ADR-0049
on top of the existing InMemoryJobRegistry. Substrate now
advertises capabilities.tasks via rmcp 1.7 TasksCapability
and answers the five tasks/* verbs in addition to keeping
the ADR-0040 job.* namespace for the deprecation window.
substrate-mcp-server changes:
- handlers/service.rs: imports rmcp task types (CreateTaskResult,
GetTaskInfoParams, GetTaskResult, GetTaskPayloadResult,
CancelTaskParams, CancelTaskResult, ListTasksResult, Task,
TaskStatus, TasksCapability). build_server_capabilities uses
enable_tasks_with(TasksCapability::server_default()). Five
ServerHandler overrides added (enqueue_task, list_tasks,
get_task_info, get_task_result, cancel_task), each delegating
to JobRegistryPort (submit/list/status/result/cancel). Three
private helpers (job_state_to_task_status, job_entry_to_task,
client_id_from_context).
- signal_handlers.rs: SIGPIPE SIG_IGN stays a no-op stub
documented inline. The substrate-mcp-server crate carries
#![cfg_attr(not(test), forbid(unsafe_code))] which forbids
the nix::sys::signal::signal unsafe call inside this crate.
Wave D follow-up will lift it into a substrate-signal -sys
crate following the substrate-fs-index-macos-sys precedent.
- handlers/dispatcher.rs, handlers/initialize.rs,
handlers/job_tools.rs, handlers/mod.rs,
handlers/rmcp_progress_notifier.rs: refactor + lint cleanup
for the tasks/* dispatch path; ADR-0040 progress notifier
reused as the push channel surface for both namespaces.
- audit.rs, capability_probe.rs, composition.rs,
config_loader.rs, logging.rs, stub_ports.rs: incidental
cleanups exposed by the new Tasks call sites.
- tests/mcp_smoke.rs + tests/mcp_job_flow.rs: existing
integration tests adjusted for the new capability bundle.
substrate-config: loader + model updated to surface the
tasks-related knobs (long-poll wait timeout, idempotency key
TTL) used by the new handlers.
substrate-domain: value_objects/job_id.rs gains the trivial
helpers required by the rmcp Task <-> JobId bridge.
substrate-policy: jail_factory + per-OS modules touched to
unblock the composition-root rewiring; no policy semantics
changed.
cargo check --workspace --all-targets + cargo clippy
--workspace --all-targets exit 0.
Refs: ADR-0001, ADR-0005, ADR-0013, ADR-0027, ADR-0040,
ADR-0049.
Signed-off-by: Fabricio Archanjo <farchanjo@gmail.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: crates/substrate-config/src/loader.rs
+20-5Lines changed: 20 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -48,7 +48,10 @@ pub enum ConfigError {
48
48
/// Returns [`ConfigError::Parse`] when a TOML file exists but is malformed or
49
49
/// contains unknown keys. Returns [`ConfigError::Validation`] when post-parse
50
50
/// invariants are violated.
51
-
#[expect(clippy::result_large_err, reason = "figment::Error is large; boxing would add indirection for no functional benefit in this startup-path function")]
51
+
#[expect(
52
+
clippy::result_large_err,
53
+
reason = "figment::Error is large; boxing would add indirection for no functional benefit in this startup-path function"
#[expect(clippy::result_large_err, reason = "figment::Error is large; boxing would add indirection for no functional benefit in this startup-path function")]
68
+
#[expect(
69
+
clippy::result_large_err,
70
+
reason = "figment::Error is large; boxing would add indirection for no functional benefit in this startup-path function"
/// Post-parse validation of assembled configuration.
131
-
#[expect(clippy::result_large_err, reason = "figment::Error is large; boxing would add indirection for no functional benefit in this startup-path function")]
140
+
#[expect(
141
+
clippy::result_large_err,
142
+
reason = "figment::Error is large; boxing would add indirection for no functional benefit in this startup-path function"
/// Runtime-level security hardening knobs per `#SecurityRuntime` in `runtime_config.cue`.
207
-
#[expect(clippy::struct_excessive_bools, reason = "security config intentionally exposes individual on/off knobs; a state-machine would be less ergonomic for TOML deserialization")]
207
+
#[expect(
208
+
clippy::struct_excessive_bools,
209
+
reason = "security config intentionally exposes individual on/off knobs; a state-machine would be less ergonomic for TOML deserialization"
0 commit comments