Canvas position

Try this:

    myDiagram =
      $(go.Diagram, "myDiagramDiv",
        {
          positionComputation: (diag, pt) => new go.Point(Math.max(-diag.padding.left, pt.x), Math.max(-diag.padding.top, pt.y))
        });

    myDiagram.nodeTemplate =
      $(go.Node, "Auto",
        {
          dragComputation: (node, pt, snappt) => {
            var dx = node.location.x - node.actualBounds.x;
            var dy = node.location.y - node.actualBounds.y;
            return new go.Point(Math.max(dx, snappt.x), Math.max(dy, snappt.y));
          }
        },
        // the details of the node don't matter
        $(go.Shape, { fill: "white" },
          new go.Binding("fill", "color")),
        $(go.TextBlock, { margin: 8 },
          new go.Binding("text"))
      );

The Diagram.positionComputation ensures that the viewport never shows negative coordinates, except immediately along the edge as determined by the Diagram.padding.

The Node.dragComputation keeps the user from dragging nodes into negative coordinates.