Skip to content

[Draft] Specification of the dune tools implementation - #15543

Draft
shonfeder wants to merge 72 commits into
mainfrom
tools-impl-design
Draft

[Draft] Specification of the dune tools implementation#15543
shonfeder wants to merge 72 commits into
mainfrom
tools-impl-design

Conversation

@shonfeder

@shonfeder shonfeder commented Jul 19, 2026

Copy link
Copy Markdown
Member

Description

This PR proposes the (WIP) implementation specification split off from #13457 , developed initially by @Alizter and to be refined, extended, and revised in the ongoing discovery work towards a solid implementation design.

Related Issue and Motivation

Fixes #15544

Checklist

  • Tests added, if applicable.
  • Change log entry added for any user-facing changes.
  • Documentation added for any user-facing changes.

shonfeder and others added 30 commits May 29, 2026 23:06
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Ali Caglayan <alizter@gmail.com>
Let's add this back when the document takes shape to clarify confusion.
At the moment it is not adding anything and is potentially confusing.

Signed-off-by: Ali Caglayan <alizter@gmail.com>
Signed-off-by: Ali Caglayan <alizter@gmail.com>
Signed-off-by: Ali Caglayan <alizter@gmail.com>
- It shouldn't mention implementation details (switch etc.)
- It is too constrained (excluding tools defined in a project build)
- Given unnecessary context (mentioning current design)
- Does not include wide enough examples of tools (only mentions tools we
  widely used and already supported with bespoke mechanisms)

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
This is essential for clear communication, otherwise key terms get used
inconsistently or understood ambiguously.

As a result of recovering terminology we also detect an error in the
"generality" principle: packages themselves are not tools, but they
provide tools so "any opam package ... can be a tool" is a category
mistake.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
This is not a useful section: things that aren't required just don't
need to be listed as requirements.

The canonical way of differentiating necessary from merely recommended
requirements is MUST vs. SHOULD (or RECOMMENDED):
https://www.ietf.org/rfc/rfc2119.txt

Signed-off-by: Shon Feder <shon.feder@gmail.com>
If we are going to have a section of principles, let's make them
principled principles.

- "Clean source tree" is a requirement or an implementation detail
- "Orthogonality" as stated was an implementation detail, generalizing
  it gives a principle.
- "Multi-version" looks like a requirement, and it is entailed by a
  the principle of orthogonality

Signed-off-by: Shon Feder <shon.feder@gmail.com>
- Drop implementation details from definition of "install"
- Redefine "available" in terms of "install" as "installable"

Signed-off-by: Shon Feder <shon.feder@gmail.com>
- Everything but summary after TOC
- "how to read doc" sections should be first

Signed-off-by: Shon Feder <shon.feder@gmail.com>
- May as well link the sections.
- Explain what the terminology section is for.
- Remove CR explanation: no place for those in the mergable doc.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Make it clear that, while compatability is required, satisfaction is
not.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Reference to legacy system is not relevant for requirements (could be in
implementation)

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
These are design ideas for possible functionality, they are not relevant
to functional specifications.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
But make this a "SHOULD" rather than a "MUST"

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Since packages provide tools, rather than define them, we avoid
equivocating between package names and tools: a package may provide a
tool that shares the package name, but when tools are invoked, it is done
by the name of tool executable, not by the name of the package.
Therefore, binary selection is just the ability to filter a subset of
available packages in case you don't want everything provided by a
package (the default).

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
No idea why this was merged alongside an unrelated requirement.

Factor the versions pecification requirement into its own issue.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Not sure why this overspecification and reduction in generality. We want
the general usability.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Many of there are out of date, e.g., work on in-and-out is onging, and
we have settled in conversation that support for something like an `env`
subcommand is required (most recently in the metting with the team
 working on editors).

There is also no reason to rule out precompiled binaries or ephemeral
runs: if we don't state those as requirments now, we won't work on
implementing them at this point. There is no reason in principle such
things shouldn't be considered in the future.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
It is important to be able to consider the requirements above the code
level and without commitment to specific implementation details.
Splitting the implementation spec notes into their own file help support
this abstraction.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
shonfeder and others added 26 commits July 18, 2026 23:52
These are implementation details, and are covered on the requirements
side by "programmatic use"

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Entailed by principle

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Relevant parts extracted from issues on the issue tracker tagged 'dev-tools'

Signed-off-by: Sudha Parimala <sudharg247@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Links aren't rendered in summary tags, and we will have additional
details we want to add probably, so let's make the collapsed section
more general.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
It didn't make sense in the req it was under, and indeed we didn't have
a req for it.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
Signed-off-by: Shon Feder <shon.feder@gmail.com>
To be added back in a new branch, and staged as its own PR.

Signed-off-by: Shon Feder <shon.feder@gmail.com>
dune tools list List all locked tools and versions

dune tools add Lock all tools from (tool) stanzas
dune tools add <pkg>[.<version>] ... Lock specific tool(s)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this require the tool that's being added to have a tool stanza in the workspace?

Sudha247 added 3 commits July 28, 2026 11:29
Signed-off-by: Sudha Parimala <sudharg247@gmail.com>
This is a rewrite of the tool stanza with the following:
- Include relevant fields from lock_dir stanza.
- Introduce a special variable :inhert, and a field (inherit_lock_dir) to
inherit config from lock_dir stanza.
- More examplesWq

Signed-off-by: Sudha Parimala <sudharg247@gmail.com>
Signed-off-by: Sudha Parimala <sudharg247@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Specify tool management implementation to satisfy the requirements

3 participants