Restore the workspace canvas and atomic Studio creation workflow

This commit is contained in:
Timothy J. Aveni
2026-09-22 22:17:00 -07:00
parent 595eda834f
commit 20e9f4b056
4 changed files with 81 additions and 21 deletions
+29 -2
View File
@@ -1458,6 +1458,21 @@ const validateBoundDependencies = (
);
break;
}
const selected = requirement.operations?.map(
(id) => params.indexes.interfaces.get(requirement.interfaceRevisionId)?.operations.get(id)?.operation,
);
if (
selected?.some((op) => op?.scope === "class") &&
(interfaceBinding.via || interfaceBinding.receiver || selected.some((op) => op?.scope !== "class"))
) {
issue(
issues,
"invalid-dependency-binding",
path,
"Static interface dependencies require a receiverless selection of class operations on the bound atom",
);
break;
}
// The reference supplies its own checked witness at invocation time.
// This is not a requirement that the current receiver implements the interface.
if (interfaceBinding.receiver === "input") break;
@@ -1921,8 +1936,20 @@ const validateConformances = (
});
if (
operation.scope === "class" &&
(binding.dependencies.some((entry) => !["constructor", "creation"].includes(entry.binding.kind)) ||
packageExport.dependencyPorts.some((entry) => !["constructor", "creation"].includes(entry.requirement.kind)))
packageExport.dependencyPorts.some(({ requirement }) => {
if (["constructor", "creation", "reflection"].includes(requirement.kind)) return false;
if (requirement.kind !== "interface") return true;
if (requirement.receiver === "input") return false;
const contract = indexes.interfaces.get(requirement.interfaceRevisionId);
return (
!requirement.operations?.length ||
!requirement.operations.every((id) =>
contract?.revision.members
.flatMap((m) => m.operations)
.some((op) => op.id === id && op.scope === "class"),
)
);
})
) {
issue(
issues,