file is a project. That project executes some program to do a deployment. See https://pulumi.io/reference/project.html.
There can be multiple instances of a single project deployed at a time. This is often the case for development/test/production, or for separate regions, etc. But some projects will just have a single instance, at least at some moment in time. Each instance of a project is a stack. See https://pulumi.io/reference/stack.html.
Today, the identity of a stack is
and the project is just metadata (tags) attached to it. That project metadata is used in the default rendering on the
page at app.pulumi.com and to filter
CLI commands when in a project folder. But otherwise is just metadata. Only stacks exist.
We are moving to make the project part of the identity as
pulumi stack ls
. As you note in the thread, this will make it natural to think of having a
stack for a project in cases where you know you will only have one.