Skip to content

Commit 8e4f1fe

Browse files
authored
Resolve standalone inline-manifest roots in file commands (#571)
1 parent 01694a4 commit 8e4f1fe

File tree

7 files changed

+10
-6
lines changed

7 files changed

+10
-6
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ and this project adheres to Semantic Versioning (https://semver.org/spec/v2.0.0.
1313
- Added MCP tool `resolve_datasheet` to produce cached `datasheet.md` + `images/` from `datasheet_url`, `pdf_path`, or `kicad_sym_path`.
1414
- Added LSP request `pcb/resolveDatasheet`, sharing the same resolve flow as the MCP tool.
1515

16+
### Fixed
17+
18+
- Standalone `.zen` files with inline manifests now map `Board(..., layout_path=...)` to `package://workspace/...`, avoiding absolute-path leakage.
19+
1620
## [0.3.44] - 2026-02-20
1721

1822
### Added

crates/pcb/src/bom.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ pub fn execute(args: BomArgs) -> Result<()> {
8989
crate::file_walker::require_zen_file(&args.file)?;
9090

9191
// Resolve dependencies before evaluation
92-
let resolution_result = crate::resolve::resolve(args.file.parent(), args.offline, args.locked)?;
92+
let resolution_result = crate::resolve::resolve(Some(&args.file), args.offline, args.locked)?;
9393

9494
let file_name = args.file.file_name().unwrap().to_string_lossy();
9595

crates/pcb/src/layout.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ pub fn execute(mut args: LayoutArgs) -> Result<()> {
5454
let locked = args.locked || std::env::var("CI").is_ok();
5555

5656
// Resolve dependencies before building
57-
let resolution_result = crate::resolve::resolve(args.file.parent(), args.offline, locked)?;
57+
let resolution_result = crate::resolve::resolve(Some(&args.file), args.offline, locked)?;
5858

5959
let zen_path = &args.file;
6060
let file_name = zen_path.file_name().unwrap().to_string_lossy().to_string();

crates/pcb/src/mcp.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ fn run_layout(args: Option<Value>, ctx: &McpContext) -> Result<CallToolResult> {
433433

434434
let no_open = get_bool("no_open", false);
435435

436-
let resolution_result = crate::resolve::resolve(zen_path.parent(), false, false)?;
436+
let resolution_result = crate::resolve::resolve(Some(&zen_path), false, false)?;
437437

438438
let mut has_errors = false;
439439
let mut has_warnings = false;

crates/pcb/src/open.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub fn execute(args: OpenArgs) -> Result<()> {
2323
crate::file_walker::require_zen_file(&args.file)?;
2424

2525
// Resolve dependencies before building
26-
let resolution_result = crate::resolve::resolve(args.file.parent(), args.offline, args.locked)?;
26+
let resolution_result = crate::resolve::resolve(Some(&args.file), args.offline, args.locked)?;
2727

2828
let zen_path = &args.file;
2929
let file_name = zen_path.file_name().unwrap().to_string_lossy();

crates/pcb/src/route.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ pub fn execute(args: RouteArgs) -> Result<()> {
4646
}
4747

4848
// Resolve dependencies
49-
let resolution_result = crate::resolve::resolve(args.file.parent(), false, false)?;
49+
let resolution_result = crate::resolve::resolve(Some(&args.file), false, false)?;
5050

5151
let zen_path = &args.file;
5252
let board_name = zen_path.file_stem().unwrap().to_string_lossy();

crates/pcb/src/sim.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub fn execute(args: SimArgs) -> Result<()> {
4747
let mut out = get_output_writer(&args.output.to_string_lossy())?;
4848

4949
// Resolve dependencies before building
50-
let resolution_result = crate::resolve::resolve(zen_path.parent(), args.offline, args.locked)?;
50+
let resolution_result = crate::resolve::resolve(Some(zen_path), args.offline, args.locked)?;
5151

5252
let Some(schematic) = build_zen(
5353
zen_path,

0 commit comments

Comments
 (0)