Skip to content

fix(publisher): document --algorithm for ECDSA login and fix validate --help - #1519

Merged
rdimitrov merged 1 commit into
mainfrom
fix/publisher-cli-docs
Aug 10, 2026
Merged

fix(publisher): document --algorithm for ECDSA login and fix validate --help#1519
rdimitrov merged 1 commit into
mainfrom
fix/publisher-cli-docs

Conversation

@rdimitrov

Copy link
Copy Markdown
Member

Two real defects, plus the CLI reference claims that go with them.

1. ECDSA P-384 login instructions cannot work

Every "ECDSA P-384" tab ran the identical command to the Ed25519 tab. Since --algorithm defaults to ed25519 (login.go:100), a 96-hex key is rejected outright. Verified against a freshly generated P-384 key:

$ mcp-publisher login dns --domain=example.com --private-key=$KEY
Signing in process using key algorithm ed25519
Error: failed to get token: failed to sign timestamp: invalid seed length: expected 32 bytes, got 48

$ mcp-publisher login dns --algorithm ecdsap384 --domain=example.com --private-key=$KEY
Signing in process using key algorithm ecdsap384
Expected proof record:                      # works

--algorithm is registered at login.go:129 and described correctly by the CLI's own help, but grep -rn algorithm docs/ had zero hits for it. Anyone following the ECDSA path in the docs hit that error with nothing to tell them why.

Fixed at all four in-process ECDSA sites (2 in authentication.mdx, 2 in cli/commands.md), with a note that cloud signing providers derive the algorithm from the key itself so the flag does not apply to them.

2. mcp-publisher validate --help was broken

$ mcp-publisher validate --help
Unknown command: validate
...
Use 'mcp-publisher <command> --help' for more information about a command.

It printed the very instruction that had just failed. main.go intercepted --help for all subcommands and called printCommandHelp, whose switch had no validate case — making ValidateCommand's own help block (validate.go:120-129) unreachable.

Rather than paste a third copy of the help text, printCommandHelp now returns whether it handled the command, and the caller falls through to normal dispatch when it did not. Commands own their own --help, and any future command with this shape works automatically.

Command Before After
validate --help Unknown command, exit 0 prints its help, exit 0
publish --help works works
init -h works works
bogus --help Unknown command, exit 0 Unknown command, exit 1

3. CLI reference corrections

  • --registry is not global. It exists only on login; other commands read the URL from the stored token. publish --registry=URL silently treats the flag as the server.json path. cmd/publisher/README.md had exactly this broken example.
  • --token was undocumented despite github-actions.mdx:123 depending on it. Now documented, noting it is login github only.
  • init takes no flags and does not prompt; it writes TODO: placeholders. The reference said init [options] and "Prompts for missing required fields".
  • Refreshed the --help transcript in quickstart.mdx, which listed only 4 of 6 commands. Now byte-for-byte identical to real output (diffed).
  • Added validate to the command list in cmd/publisher/README.md.

Verification

go build and go test ./cmd/... pass. All four help paths exercised with exit codes checked. The 23 goconst findings in validate_test.go are pre-existing — identical count on pristine main, none in main.go. Quickstart transcript diffed against real output.

🤖 Generated with Claude Code

… --help

The ECDSA P-384 login instructions could not work. Every "ECDSA P-384" tab ran the
same command as the Ed25519 tab:

    mcp-publisher login dns --domain "$MY_DOMAIN" --private-key "$PRIVATE_KEY"

`--algorithm` defaults to ed25519, so a 96-hex ECDSA key is rejected:

    Error: failed to get token: failed to sign timestamp:
    invalid seed length: expected 32 bytes, got 48

Verified against a real P-384 key: the command above fails, and the same command
with `--algorithm ecdsap384` reaches "Expected proof record". `--algorithm` was
documented nowhere -- `grep -rn algorithm docs/` had zero hits for it -- even though
the CLI's own help text describes it correctly.

Also fixes `mcp-publisher validate --help`, which printed "Unknown command: validate"
followed by the general usage that itself says to run `<command> --help`. main.go
intercepted `--help` for every subcommand and called printCommandHelp, whose switch
had no `validate` case, making ValidateCommand's own help block unreachable.
printCommandHelp now reports whether it handled the command so the caller falls
through to normal dispatch, letting a command parse its own `--help`. This avoids a
second copy of the help text and fixes any future command with the same shape.
Unknown commands still exit 1.

Docs corrected:

- Add `--algorithm ecdsap384` to all four in-process ECDSA examples, and note that
  cloud signing providers derive the algorithm from the key so the flag does not
  apply to them
- `--registry` is a `login` flag, not global. `publish --registry=URL` treats the
  flag as the server.json path; other commands read the URL from the login token.
  Corrected in both the CLI reference and cmd/publisher/README.md
- Document `--token` (login github only), which github-actions.mdx already uses
- `init` takes no flags and is non-interactive; it writes TODO placeholders rather
  than prompting for missing fields
- Refresh the `--help` transcript in quickstart.mdx, which omitted `status` and
  `validate`; it now matches the real output exactly
- Add `validate` to the command list in cmd/publisher/README.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@rdimitrov
rdimitrov merged commit 43402d8 into main Aug 10, 2026
7 checks passed
@rdimitrov
rdimitrov deleted the fix/publisher-cli-docs branch August 10, 2026 13:25
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.

1 participant