Skip to content

Commit 5ea6b0b

Browse files
committed
fix(lsp): resolve standalone sibling module imports
1 parent 52caae1 commit 5ea6b0b

2 files changed

Lines changed: 46 additions & 11 deletions

File tree

‎docs/CELLSCRIPT_0_15_RELEASE_NOTES_DRAFT.md‎

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1-
# CellScript 0.15 Release Notes Draft
1+
# CellScript 0.15 Release Notes
22

3-
**Status**: Release gate passed on the `nightly-0.15` implementation branch.
3+
**Status**: Released as `v0.15.0`.
44

5-
**Updated**: 2026-05-20.
5+
**Release date**: 2026-05-26.
6+
7+
**Release tag**: `v0.15.0`.
8+
9+
**GitHub release**:
10+
<https://github.com/a19q3/CellScript/releases/tag/v0.15.0>.
11+
12+
**Updated**: 2026-05-26.
613

714
CellScript 0.15 is the scoped-invariant, Covenant ProofPlan, and verifier
8-
soundness hardening preview. It closes the known fail-open and
15+
soundness hardening release. It closes the known fail-open and
916
semantic-boundary bugs found during the hardening audit, makes verifier
1017
triggers, scope, coverage, builder assumptions, and enforcement gaps explicit
1118
in source and metadata, and promotes cell identity into a first-class primitive
@@ -467,23 +474,28 @@ Full release gate:
467474
./scripts/cellscript_gate.sh release
468475
```
469476

470-
Latest recorded release evidence, generated on 2026-05-20:
477+
Latest recorded release evidence, generated on 2026-05-26 for the `v0.15.0`
478+
release line:
471479

472480
- Release gate status: passed.
473481
- Production evidence status: `status: "passed"`, `production_ready: true`.
474-
- CKB production scope: 7 bundled examples, 43/43 scoped action runs, 17/17
475-
scoped lock entries, 17 valid-spend and 17 invalid-spend lock cases.
476-
- Stateful evidence: 27 local CKB stateful scenario runs.
482+
- CKB production scope: 7 bundled example deployments, 43 scoped action runs,
483+
17 scoped lock entries, 17 valid-spend and 17 invalid-spend lock cases.
484+
- Action coverage: 4 token actions, 9 NFT actions, 10 timelock actions,
485+
8 multisig actions, 4 vesting actions, 6 AMM actions, and 2 launch actions.
486+
- Stateful evidence: 27 local CKB stateful scenario runs covering 46 steps.
477487
- Final production hardening gate: `status: "passed"`, `ready: true`.
478488
- Strict backend CI audit: passed; the CI audit covers compiler-layer IR,
479489
codegen, RISC-V, syntax-combination, and regression contracts, while the
480490
full release acceptance covers the stateful CKB evidence boundary.
491+
- VS Code extension validation and dry-run packaging passed; the release VSIX
492+
is attached to the GitHub release as `cellscript-vscode-0.15.0.vsix`.
481493

482494
Report paths:
483495

484496
```text
485-
target/ckb-cellscript-acceptance/20260520-215759-25169/ckb-cellscript-acceptance-report.json
486-
target/cellscript-strict-backend-audit/strict-backend-audit-ci-20260520-215735.json
497+
target/ckb-cellscript-acceptance/20260526-191436-8309/ckb-cellscript-acceptance-report.json
498+
target/cellscript-strict-backend-audit/strict-backend-audit-ci-20260526-191416.json
487499
target/cellscript-backend-shape/backend-shape-report-release.json
488500
target/cellscript-schema-manifest/schema-manifest-report-release.json
489501
```

‎src/lsp/mod.rs‎

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2338,7 +2338,16 @@ fn lsp_workspace_cell_files(path: &Utf8Path) -> Result<Vec<Utf8PathBuf>> {
23382338
}
23392339
let path = lsp_canonical_utf8_path(path)?;
23402340
let Some(package_root) = lsp_find_package_root(&path)? else {
2341-
return Ok(vec![path]);
2341+
let mut files = Vec::new();
2342+
let mut seen_files = HashSet::new();
2343+
if let Some(parent) = path.parent() {
2344+
lsp_collect_cell_files_recursive(parent, &mut files, &mut seen_files)?;
2345+
}
2346+
if seen_files.insert(path.clone()) {
2347+
files.push(path);
2348+
}
2349+
files.sort();
2350+
return Ok(files);
23422351
};
23432352

23442353
let manifest = lsp_read_manifest_value(&package_root)?;
@@ -3196,6 +3205,20 @@ where
31963205
);
31973206
}
31983207

3208+
#[test]
3209+
fn lsp_loads_sibling_modules_for_standalone_example_imports() {
3210+
let root = Utf8PathBuf::from(env!("CARGO_MANIFEST_DIR"));
3211+
let launch_path = root.join("examples/launch.cell");
3212+
let launch_source = std::fs::read_to_string(&launch_path).expect("launch example source");
3213+
let launch_uri = utf8_path_to_file_uri(&launch_path);
3214+
3215+
let mut server = LspServer::new();
3216+
server.open_document(launch_uri.clone(), launch_source);
3217+
3218+
let diagnostics = server.get_diagnostics(&launch_uri);
3219+
assert!(diagnostics.is_empty(), "unexpected launch example diagnostics: {:?}", diagnostics);
3220+
}
3221+
31993222
#[test]
32003223
fn test_workspace_references_across_modules() {
32013224
let temp = tempdir().unwrap();

0 commit comments

Comments
 (0)