Repository navigation
Conversation
…ty labels - m365: v11 has no --confirm; name -f/--force as the prompt-skipping flag - atl: --download --id, --download-all, --upload; page archive --unarchive; drop deprecated-alias note and v1.12 pins (doc already needs >= v1.13) - atl: add assign, changelog, doctor, auth refresh, transition --comment, page edit --append - n8nctl: add project list and workflow transfer - gh: fetch the repo's default branch instead of main - Safety labels replace CRITICAL; lower shouting caps where the line carries its reason
There was a problem hiding this comment.
Code Review
This pull request updates the documentation in lib/llm/index.js for several CLI tools, including sqlcmd, git, atl, n8nctl, gcx, and m365. Key updates include renaming 'CRITICAL' safety headers to 'Safety', replacing hardcoded branch names with placeholders, adding new commands for Jira, Confluence, and n8nctl, and clarifying safety guidelines regarding the -f/--force flag. The review feedback suggests enclosing the transition name 'Done' in double quotes in the newly added Jira transition example to maintain consistency and prevent potential shell parsing issues.
With -S the server flag wins over the current context, so showing the context displayed the wrong target for production MI writes.
|
Ratatoskr reviewed this pull request. Changes requested on Finished 2026-10-06 13:13 UTC. |
fank
left a comment
There was a problem hiding this comment.
REQUEST_CHANGES: 1 blocking finding. The new confluence page archive --unarchive guidance documents a command that always fails in every atl-cli release.
Review details
Reviewed head 22c4afd6b107c8fbe076a11d8a7c51581328360f.
Blocking
1. archive --unarchive is a stub that always fails (item 27): lib/llm/index.js:382, :403, and the removed note at old line 388
The --unarchive flag exists in --help, but the implementation never calls an API. In atl-cli v1.13.0, v1.14.0 and current main, internal/api/confluence.go contains:
// UnarchivePage restores an archived page.
// NOTE: Confluence Cloud has no REST API for unarchiving pages.
// The v1 workaround using PUT /content/{id} was deprecated (410 Gone).
// Users must restore archived pages via the Confluence web UI.
func (s *ConfluenceService) UnarchivePage(ctx context.Context, pageID string) error {
return fmt.Errorf("unarchive is not supported via API - ... Please use the Confluence web UI to restore archived pages")
}runArchive in internal/cmd/confluence/page/archive.go calls it for each page ID and reports Failed to unarchive page …. The text this PR removes ("410 Gone (unarchive removed - use web UI)" and "reversible (via web UI only - no restore API)") was correct. The replacement is wrong in two ways:
- It sends agents to a command that cannot succeed.
- The tip "Archive is reversible (
archive --unarchive)" tells the model that it can undo an archive itself. An agent that believes this may archive pages more readily. In practice, only a human in the web UI can restore them.
Checking --help alone can't catch this. The flag is registered, but nothing behind it calls an API.
Fix: drop the --unarchive example line and restore both the API note and the "via web UI only" tip. Option: keep a line that says --unarchive exists but returns an error, so agents don't try it.
Verified correct (against atl-cli v1.13.0 source, the floor named in the doc header, and n8n-cli v1.3.0)
jira issue attachment:--downloadrequires--id(attachment.go:70-71).--download-all,--upload(stringArray, repeatable) and--outputall exist.jira issue assign --assignee(@me, a user, or-),jira issue changelog --field,transition --comment/-c,confluence page edit --append/-a,doctorandauth refresh --hostnameall exist in v1.13.0. Removing thev1.12.0+pins therefore loses nothing.- The deprecated top-level aliases are still registered (hidden) in v1.14.0 (
internal/cmd/root.go:75-79). Dropping the sentence only removes a pointer to a deprecated form, so that change is fine. - n8nctl
workflow transfer <workflow-id> <project-id>with--skip-credentials, andproject list, both exist in v1.3.0 (internal/cmd/workflow/workflow.go:540-578,internal/cmd/project/project.go). - m365
-f/--forcereplacing--confirm: I did not check this against the m365 binary because it isn't installed here. It does match the PnP CLI's documented change from--confirmto--forcesince v7, and no--confirmremains in the file. - sqlcmd write rule: step 1 now names the
-Sserver first. That fixes the real mismatch wherecurrent-contextshowedstagewhile a-Swrite went elsewhere. The doc and the generated block (:65,:1239) are in sync. - Label softening: every rule and step is still present. Only the emphasis changed.
Optional, non-blocking
n8nctl workflow transfer(:639-640) moves credentials across projects by default. The n8nctl section has no safety rule, which matches howactivateis documented today. Still, a short "confirm before transferring" note may be worth adding, because this command changes who can use a credential.
Tests and checks
- This is a docs-only change in a template string, and no test covers
CLI_DOCScontent. That is consistent with the repository today, so it is not a blocker. - I could not run
node --testlocally because dependencies (chalk) are not installed in the review checkout, and I did not runnpm installthere. CI lint, format and CodeQL pass. There is no test job in the PR checks.
Earlier discussions
- One review thread exists (gemini-code-assist, quoting
"Done"). It is already resolved, and the current head quotes the name at:265. No action needed. I did not author it, so I did not touch it.
|
|
||
| # Archive and delete | ||
| atl --context prod confluence page archive <id> # Archive page | ||
| atl --context prod confluence page archive <id> --unarchive # Restore archived page |
There was a problem hiding this comment.
This always fails. In atl-cli v1.13.0, v1.14.0 and current main, UnarchivePage (internal/api/confluence.go) returns unarchive is not supported via API ... Please use the Confluence web UI without making any request. The flag exists in --help, but nothing behind it calls an API. Please drop this line and restore the removed use web UI API note.
| - Use \`--raw\` to get storage format (XHTML with macros) for backup/migration | ||
| - Use \`children --descendants\` to map full page tree with depth levels | ||
| - Archive is reversible (via web UI only - no restore API), delete is not | ||
| - Archive is reversible (\`archive --unarchive\`), delete is not |
There was a problem hiding this comment.
Archive is only reversible by a human in the Confluence web UI. With this wording, an agent may think it can undo an archive itself and archive more readily. Please restore the previous wording: Archive is reversible (via web UI only - no restore API), delete is not.
Problem
An audit of the generated CLI docs (
lib/llm/index.js) found flags and subcommands that don't exist in the installed tools. Target models follow the docs literally, so a wrong flag produces a wrong command. The audit also found shouting labels (**CRITICAL**,NEVER,DO NOT) that add pressure without adding information.Changes
--confirm; the prompt-skipping flag is-f, --force. Step 3 of the m365 rule (cli-m365 doc and generated CLAUDE.md block) and the cli-m365 tip now name-f/--force. Steps 1–2 are unchanged.-Sserver if the command passes one, otherwise the chained or current context. Before, they showedsqlcmd config current-context, which showsstage/localwhile a-Swrite goes to the production MI. Step 3 (explicit confirmation) is unchanged.**CRITICAL**:→**Safety**:in cli-sqlcmd, cli-m365, cli-hcloud and cli-ovhcloud, which matches the generated block. Steps are unchanged; the sqlcmd write-safety steps are untouched. Caps were lowered only where the line already gives its reason (gh reviews endpoint, ADF mention syntax, gcx stack-login restart, gcx--cloud-token, playwright Basic Auth, Confluence--body). No constraint was removed.--download <id>→--download --id <id>; added--download-alland--upload.page archive <id> --unarchive. The tip now reads "Archive is reversible (archive --unarchive), delete is not".jira …command forms. Removed thev1.12.0+pins: every example passes--context, which needs ≥ v1.13.0 (the doc header already requires this). The--reply-toversion note stays, because it describes a behavior difference rather than a feature gate.git fetch origin main→git fetch origin <default-branch>(masterormain).jira issue assign,jira issue changelog,doctor,auth refresh,transition --comment,confluence page edit --append,attachment --upload. n8nctl:project list,workflow transfer. Skipped: n8nctlvariable(already documented). Skipped:gh attach list/get, because gh attach is not documented in this package. Its doc (negsoft-pr-screenshots.md) comes from environment-setupsrc/llm_internal.js, so it is a follow-up there.Verification
Each flag and subcommand was checked against the installed binaries with read-only
--help.go version -mreports atl-cli v1.14.0, n8n-cli v1.3.0 and m365 v11.11.0:spo file remove --help,spo list remove --helpandspo site remove --helpall show-f, --force — Don't prompt for confirm…. None of them has--confirm.jira issue attachment --helpshows-d, --download Download a specific attachment (requires --id),--id,-a, --download-all,-u, --upload stringArrayand-o, --output.confluence page archive --helpshows-u, --unarchive Unarchive (restore) pages instead of archiving.jira issue assign --helpshows--assignee(@me, or-to unassign).jira issue changelog --helpshows--fieldand--limit.jira issue transition --helpshows-c, --comment.confluence page edit --helpshows-a, --append.doctor --helpandauth refresh --help(--hostname) both exist.n8nctl project --helplists onlylist.n8nctl workflow transfer --helpshows<workflow-id> <project-id>and--skip-credentials.CLI_DOCScontent contains no leftover--confirm,CRITICALorNEVER, and no stray${.npm test: 6 pass, 0 fail.npm run lint: clean.npm run check-format: clean.Rollout
environment-setup uses the published
@enthus-appdev/llm-cli-setuppackage, so these docs reach developer machines only after a release of this package and a bump in environment-setup.