ADR 0218: docs owns the manual; help owns CLI reference
Amendments.
- Vocabulary: the retired
[docs]configuration spelling preserves its migration to[map];docsis canonical again only as the bundled-manual command.- Pre-tag reset (2026-07-29; applies ADR 0219): before the first release tag, an owner decision extended ADR 0219's reasoning to the public schemas: no released consumer holds the version-1
helppublication, so freezing it would publish prerelease history as a permanent contract. The result contract is squashed to a single schema v1 carrying the livedocsshapes atschema/discern-results.schema.json; the frozen pre-rename artifact and theschema/v2/path are deleted. This overrides the last alternative below for the pre-tag window: the append-only baseline of ADR 0208 now arms at the first release tag. The same reset makesdiscern-config.schema.jsonvalidate a realdiscern.toml— the live schema the engine enforces — and moves thesetup --config/preset document to its own identity,discern-setup-config.schema.json.
Status: accepted
Amends: command naming in ADR 0039, ADR 0120, and ADR 0130
Applies: the schema-major policy of ADR 0208
Context
§discern help had two jobs. With no target, or with a documentation target, it opened discern's bundled manual. With a known command as its target, it forwarded to that command's Cliffy reference, so discern help done and discern done --help matched. discern --help separately showed the root command reference.
The overload came from an earlier collision. The project-maintained documentation command used docs, so discern's own manual needed another name. ADR 0120 renamed that project surface to map, but left the now-free docs spelling retired to map. The temporary constraint disappeared while the compromise remained.
The remaining names set the wrong expectations. help conventionally means command syntax. docs names a browsable manual, and the public site already serves that manual at /docs. Under the overload, discern help done depended on whether done was a command or a page. The command line, Model Context Protocol (MCP), resource URI, result discriminator, and web route also used different nouns for one product surface.
This decision lands before the first public release, so there is no installed command population to migrate. There is, however, already a version-1 result-schema publication on the configured trunk. ADR 0208 makes that artifact and identity append-only even before a package tag exists.
Decision
§docs is discern's bundled-manual surface everywhere. help is CLI reference everywhere it is callable.
discern docs [target]owns the existing interactive browser, search, list, raw, JSON, export, and source-checkout--adrmodes.discern helpprints the same grouped root reference asdiscern --help.discern help <command>prints the same command reference asdiscern <command> --help.- A command-shaped target passed to
docsremains a documentation target. The manual browser never dispatches command help. - MCP exposes the manual as
discern_docs, withdiscern://docsanddiscern://docs/{+target}resources. There is nodiscern_helptool: MCP tool schemas already carry their own reference information. - The manual result discriminator and missing-tree error become
docsandno_docs.
help is not a second spelling for the manual, and docs does not redirect to map. The legacy [docs] configuration-key migration to [map] remains: configuration history is independent of the newly canonical command spelling.
The live result contract starts at schema version 2 because renaming the help contract to docs is breaking. The version-1 result artifact remains published unchanged at its existing path and identity. The current generated schema lives at schema/v2/discern-results.schema.json with the version-2 public identity. Configuration remains at schema version 1. Config and result schema majors are independent.
Consequences
§- The command grammar is unambiguous:
helpanswers “how do I invoke this?”,docsanswers “how does discern work?”, andmapanswers “what does this project know about itself?” - Terminal, MCP, result, and website names now align around
docs. discern help --jsonis intentionally not a result-envelope surface. It is human-readable CLI reference, enrolled beside the other explicit CLI JSON exclusions.- Clients that discovered the pre-release
discern_helptool or version-1helpresult must move todiscern_docsand the version-2 result schema. Retaining the version-1 artifact preserves the published contract without preserving the misleading runtime spelling. - The first package release may therefore publish configuration schema v1 and result schema v2. Those numbers describe separate compatibility domains, not package maturity.
Alternatives considered
§- Keep the overload. Rejected because
helpwould continue to mean both reference and manual, with target-dependent routing and a different noun on the website. - Keep
helpas a second spelling fordocs. Rejected because two working spellings would preserve the ambiguity and contradicthelp <command>as CLI reference. - Reset or weaken the version-1 result baseline because no package tag exists. Rejected because ADR 0208 deliberately makes the configured trunk the publication baseline. A new major is cheap; making the compatibility promise conditional is not.