Skip to content

mcid-cli 1.0: cover the MCID MVP from the terminal - #237

Merged
BenAbdou1001 merged 44 commits into
MicroClub-USTHB:devfrom
eequaled:admin-schemas
Oct 27, 2026
Merged

BenAbdou1001 merged 44 commits into
MicroClub-USTHB:devfrom
eequaled:admin-schemas

Conversation

@eequaled

@eequaled eequaled commented Oct 23, 2026 •

Copy link
Copy Markdown

Summary

  • Add CLI 1.0 command groups for projects, servers and sync, members and roles, admin access, webhooks, ops, and developer flows.
  • Align CLI request and response handling with current API contracts; add fixture-based response tests that drive the real commander program against a fake MCID server.
  • Return redirect URIs from project queries.
  • Harden secret redaction, non-interactive confirmation, webhook signing output, and permission/audit behavior.
  • Declare Express as a direct API dependency and align the access-audit e2e expectation with the permission audit category.

Review fixes (both rounds)

  • Data loss: settings reset no longer pretends to take per-key arguments; server add sends no synthetic name and refuses to re-register an existing guild; project access grant merges existing operations and validates --scope/--operation against @mcid/contracts; dev token refresh prints the rotated pair; aborted confirmations exit non-zero.
  • Broken commands: channel and message wrappers, discord-webhook list paging, defaultReaderRoleIds, member list paging + joinedAfter (DTO and repository), doctor probe/exit, open --web, status Redis advisory, dates in ops output.
  • Grammar: webhook submissions export, access role set / member get|set|unset, dev token validate|refresh are real nested subcommands; all dead space aliases removed.
  • Security: SSO listener binds 127.0.0.1 with escaped HTML and a timeout; .env and exports are written 0600 and refuse to clobber without --force; --print-curl masks the API key and emits a real, expiring HMAC signature.
  • Schema ownership: buildExamplePayload and validatePayload moved into @mcid/form-schema, so example payloads nest per step.key and the CLI validates with the same code the API runs.
  • API: joinedAfter scoped to the selected servers and active memberships; sync action documented only where it is accepted and validated; audit stays on the access category with access in ACTION_TYPES.
  • Docs: a mcid-cli section with one reference page per group, source-accurate CLI pages, regenerated API reference and CLI API types.

Issue acceptance

  • access role set and access member set print the grant diff they will apply (projects: read → write, none for an added or dropped grant) before asking, and reject an unknown resource or level with the closest valid name before any request.
  • whoami prints the signed-in admin's own effective level per resource, the same data access explain shows for someone else.
  • sync run prints the sync log id it queued and follows up with the exact sync changes <id> command; --wait covers success, failure and timeout with non-zero exits.
  • member export, role list and role permissions add have command-level tests driven through the real commander program.
  • project key show keeps the full key out of output; member export/dev env write 0600 and refuse to clobber without --force.
  • The unrequested tag-triggered release-cli.yml workflow is removed.

Issue coverage

Refs #228
Refs #229
Refs #230
Refs #231
Refs #232
Refs #233
Refs #234
Refs #235
Refs #236

Verification

  • CLI: 289 tests across 44 files green; coverage gate green (src/commands/** floor 36 / 26 / 36 / 36); tsc --noEmit and eslint . clean.
  • API: 1387 tests across 108 suites; tsc -p tsconfig.build.json and eslint "{src,test}/**/*.ts" clean.
  • @mcid/form-schema: 176 tests, typecheck and lint clean.
  • Web: 1322 tests (638 of them the docs content/nav/source-truth suites), typecheck and lint clean.
  • pnpm docs:api and pnpm --filter mcid-cli generate:api-types leave a clean tree, so both CI freshness gates pass.

Local environment notes

The workspace is mounted on a filesystem that does not expose POSIX mode bits, so the 0600 assertions run through apps/cli/src/test-support/fs.ts and are enforced on POSIX (i.e. in CI). On Node 26 the runtime defines a localStorage global that shadows jsdom's, so the web suite needs NODE_OPTIONS=--no-experimental-webstorage locally; CI's Node 24 has no such global.

@vercel

vercel Bot commented Oct 23, 2026

Copy link
Copy Markdown

@eequaled is attempting to deploy a commit to the MicroClub's projects Team on Vercel.

A member of the Team first needs to authorize it.

@eequaled
eequaled marked this pull request as ready for review October 23, 2026 03:09

@Adel2411 Adel2411 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Request changes: not ready to merge or to ship mcid-cli 1.0.0

Thanks for the big push here, the command surface is broad and lint, types, build and the 199 existing tests pass. But several commands fail or destroy data on first use, the new commands have no real tests, and none of #228 to #236 is complete yet. Inline comments mark the exact lines.

Blockers

  • Data loss: settings reset <keys> resets everything; dev token-refresh hides the only valid new tokens; server add overwrites and re-enables existing servers; project access grant drops existing operations; the audit category change splits access history.
  • Broken on every call: server channels, server channel --messages, discord-webhook list, webhook settings set, member list --joined-after, dev sso --silent (hangs).
  • Aliases with spaces can never match (submissions export, role set, member get/set/unset, token validate/refresh).
  • Security: dev sso callback binds all interfaces and reflects ?error= unescaped (XSS); .env and exports are 0644; --print-curl prints the API key.
  • Tests: no test imports anything from src/commands/ (about 6,000 lines). access.test.ts, dev.test.ts, ops.test.ts and webhook-send.test.ts test contracts, PKCE, a sparkline and a self-computed HMAC. There is no vitest config, so coverage has no threshold.
  • Repo rule removed: state-changing commands must take --profile explicitly (it was deleted from apps/cli/CLAUDE.md).

Major

  • --since 24h/7d is sent raw and returns 400 (audit list, monitor auth-failures, webhook submissions).
  • audit list --action is sent as the category filter actionType.
  • sync changes --type is ignored by the API, and only the first 100 changes are read.
  • doctor probes an endpoint that needs monitoring:read and exits 0 on failures.
  • open opens the API host, not the admin panel.
  • webhook send does no local schema validation, and --example builds payloads the API rejects (enum options are {value,label}, fields live in steps[].fields).
  • server list/get and status read lastSyncedAt/autoSyncEnabled/serverName, which the API does not return.
  • status fails when Redis is down, though Redis is optional.

Missing from the issues

Docs pages in apps/web/src/content/docs (none added); the openapi-typescript types and CI freshness check; --limit/--page/--all; --debug; help examples; prompting for missing args; per-group tests; the landing card still says webhooks only.

Process

  • Please change Closes #228 ... #236 to Refs, so the issues stay open until each one is really done.
  • Commit messages must be one-line conventional commits (feat(cli): ...); we will squash-merge.

To move forward

  1. Fix the blockers above.
  2. Add a vitest config with coverage thresholds that include src/commands/, and real command tests through the existing fake MCID server in test-support.
  3. Fix the major items or split them into follow-up issues.
  4. Add the CLI docs pages, or a follow-up issue for them.

Then I will approve CI and re-review.

Comment thread apps/cli/src/commands/ops.ts Resolved
Comment thread apps/cli/src/commands/dev.ts Resolved
Comment thread apps/cli/src/commands/project.ts Resolved
Comment thread apps/cli/src/commands/project.ts Resolved
Comment thread apps/cli/src/commands/server.ts Resolved
Comment thread apps/cli/src/commands/project.ts Resolved
Comment thread apps/cli/src/commands/webhook.ts Resolved
Comment thread apps/cli/src/lib/resolver.ts Resolved
Comment thread apps/cli/src/lib/confirm.ts Resolved
@eequaled
eequaled marked this pull request as draft October 24, 2026 14:02
@eequaled

Copy link
Copy Markdown
Author

okay on it. turned to draft meanwhile

@eequaled

Copy link
Copy Markdown
Author

Thanks for the review — every inline point checked out against the API side (we verified each claim against the DTOs/controllers before fixing). Pushed as 025573a..2513a48. What changed, in your order:

blockers — data loss

  • settings reset drops [keys...] entirely (ops.ts): the endpoint takes no body and resets everything, so the cli no longer pretends per-key reset exists and the confirmation says "all settings"
  • dev token refresh always prints the new pair unmasked (dev.ts), since the old pair is already invalidated server-side and masking the only surviving credentials loses the session
  • server add omits name unless --name is passed, so the api names the server from the bot cache, and refuses an already-registered guild id pointing at server update instead of firing the upsert that re-enabled disabled servers
  • project access grant reads the current grant first and resends its operations when --operation is omitted, sends all three operation booleans when it is given (so READ can be turned off), and validates --scope/--operation against PROJECT_SCOPES/PROJECT_OPERATIONS from contracts before any request
  • grants audit rows stay actionType: 'access' (reverted the three flips and the e2e expectation), and 'access' is now in ACTION_TYPES in the query dto + swagger enum, so the panel's Access filter stops 400ing and the history no longer splits

blockers — broken on every call

  • server channels and server channel --messages render the real {channels, categories} / {messages, hasMore} wrappers, derive the category from parentId, use timestamp, and clamp --messages to 1-100 with a usage error
  • discord-webhook list unwraps {webhooks, total, limit, offset} and pages until total
  • webhook settings set sends defaultReaderRoleIds, the field the dto actually requires
  • member list sends page/limit (default 100) with --limit/--page/--all, and --joined-after is now a declared @IsDateString() query field on CrossServerQueryDto with a repository predicate
  • dev sso --silent no longer hangs: the callback listener takes --timeout <seconds> (default 300) and exits non-zero

blockers — grammar

  • the seven space aliases are gone; webhook submissions export|list, access role set, access member get|set|unset and dev token validate|refresh are real nested subcommands, with the hyphenated spellings kept as shorthands

security

  • the sso callback binds 127.0.0.1 only and html-escapes the reflected ?error= value
  • .env files, member/audit/stats/submission exports are written mode 0600, and exports refuse to overwrite an existing file without --force
  • webhook send --print-curl prints <MCID_API_KEY> unless --reveal is passed

majors

  • --since 24h|7d|30m is expanded to an iso timestamp before sending on all three commands (audit list, monitor auth-failures, webhook submissions); a new lib/time.ts owns the parsing
  • audit list --action validates against the category enum and forwards it as actionType; help now says "category"
  • sync changes pages with limit/offset until the api's total is read, and --type maps to a new action query filter on the endpoint
  • doctor probes the unauthenticated api root instead of the monitoring:read-gated health endpoint and exits non-zero when any check fails
  • open takes --web <url> or MCID_WEB_URL for the dashboard origin instead of assuming the api host serves it
  • webhook send --example walks steps[].fields and emits enum option values (new lib/example-payload.ts), and --data payloads are validated against the schema locally before signing
  • server list/get and status read lastSyncAt/syncFrequencyHours (fields the api returns) and resolve server names client-side; redis is advisory in status — only api+db failing exits 5
  • an unknown member now throws not found (exit 4) instead of fabricating {discordId: <text>}, and the search matches globalName with limit=100
  • an aborted or mismatched confirmation exits 2, not 0

tests + repo rule

  • every command group is now driven through the real commander program against a fake mcid server that speaks the api's dto shapes (test-support/cli-harness.ts): request capture, stdout/stderr and exit codes are asserted, red-first — the suite was written before the fixes and 56 tests failed for exactly the reasons you listed
  • vitest.config.ts enforces a coverage floor on src/commands/** (35% statements/branches/functions/lines, calibrated under the current 37/27/37/38)
  • --profile is restored as a documented requirement for state-changing commands (apps/cli/CLAUDE.md is back in line with the repo rule)

process

  • the pr body now says Refs #228..#236 instead of Closes
  • commits are one-line conventional commits for the squash
  • cli docs pages are added under apps/web/src/content/docs/cli (overview, per-group command reference, webhook sending flow)

Still open on purpose, for the follow-up issues: the api-side POST /servers create-vs-update semantics (the cli now refuses the dangerous path, but the endpoint itself still resets fields on conflict), a server-side payload validator shared with the cli, and the remaining per-issue acceptance criteria #228-#236.

@Adel2411 Adel2411 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Second review: request changes, closer but still not mergeable

Thanks, this round fixed most of the first review: settings reset, token refresh, server add, channels and webhook list shapes, webhook settings, nested subcommands, dev sso loopback, escaping and timeout, key leaks, grant merging, member not-found, the audit category, relative dates. The command tests are now real (commands run against a fake server). Inline comments mark what is left.

Blockers (CI fails on this head)

  • Docs tests fail (9). The three docs/cli pages have no Source: line and contain em dashes, and the cited-files and nav-order tests fail. The PR body says web tests passed; they don't on 2513a48.
  • API reference out of date. The PR changes the API (joinedAfter, the sync action filter, access in the audit enum) but openapi.json and api-reference/** were not regenerated. Running pnpm docs:api changes openapi.json, admin/audit.mdx, admin/members.mdx and admin/sync.mdx, so the CI freshness step fails. Run it and commit the result.
  • webhook send broken for multi-step schemas (flattened fields vs payload[step.key]).

Major

  • joinedAfter ignores the server filter and inactive memberships.
  • action is documented on GET /admin/sync/logs, which rejects it; it is unvalidated on /changes.
  • dev sso --silent can only time out; default port is still the API's 3000.
  • Docs document a non-existent sync trigger, webhook examples miss the required --profile, and the --profile and exit-code claims don't match the code.
  • apps/cli/CLAUDE.md rewrite dropped key conventions (explicit --profile on writes, secrets never on disk/logs/--json, schema rules only in @mcid/form-schema, config path and 0600). Restore them.

Issues: none can be closed yet

Refs is right. Still open per issue, among others: #228 explicit --profile, --debug flag, help examples, prompting for missing args, generated openapi-typescript types + CI check, 429 Retry-After, open webhook route; #229 wizard server grants, key show --reveal, the required tests and walkthrough; #230 server channel <channel> main-server default, sync log id and +/- summary, --wait timeout exit code and tests; #231 cross-server paging, role names for --role, impact/CSV tests; #232 old→new diff, did-you-mean, root members not editable, whoami levels; #233 red field errors, real signature test against the API, walkthrough; #234 status ignores Discord, settings env vs edited, tests; #235 --silent, reuse of the login listener, step timing, dev env --project, tests and quickstart; #236 one page per group, five-command quickstart, landing card and root CLAUDE.md still say webhooks only, README Node version and "zero-dependency" claim, no tag/release/publish.

Coverage

The src/commands/** thresholds (35/25/35/35) are set just under the measured numbers, so about 63% of command code is still unexercised. Raise them as tests are added.

To merge

  1. Fix the three blockers and the majors above.
  2. Run pnpm docs:api and the docs tests, commit, and push.
  3. Restore the apps/cli/CLAUDE.md conventions.
    Remaining issue gaps can land as follow-ups, keeping the issues open.

Comment thread apps/cli/src/lib/example-payload.ts Resolved
Comment thread apps/cli/src/commands/dev.ts Resolved
Comment thread apps/web/src/content/docs/cli/index.mdx Resolved
…ames, refuse root overrides, and show settings sources
Both setters validated resource=level pairs with the same twenty lines behind two different error strings; one helper keeps one message and one place to change, pinned by a rejected-pair test.
The reference described the access setters without the before/after preview they print, and sync run without the log id it hands to sync changes.
@eequaled
eequaled marked this pull request as ready for review October 24, 2026 23:58

@BenAbdou1001 BenAbdou1001 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Gaps against #228-#236, inline below.

Comment thread apps/cli/src/index.ts
const GROUP_EXAMPLES: Record<string, string[]> = {
project: [
'mcid-cli project list --json',
'mcid-cli project create --name "Portal" --server "Micro Club"',

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This example fails: project create has no --server (error: unknown option '--server'), and #229 wants the create wizard to ask which servers to grant.

Fix: add --server <server...> plus a grant step in project create (project.ts:169), or change the example to a command that exists.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

accurate. at HEAD project create registers only --name/--description/--redirect-uri/--env-file/--force/--reveal/--profile/--json (project.ts:169-177), there is no --server, and the create path only posts name/description (project.ts:218) with no grant call. the example at index.ts:86 errors exactly as you said. taking it with the #229 grant step.

accessRoleSetOptions(roleCmd.command('set <role> <grants...>'))
.description('Update admin grants on a role (resource=level pairs)')
.action(roleSetAction);
accessRoleSetOptions(accessCmd.command('role-set <role> <grants...>'))

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

role-set, member-get, member-set, member-unset are listed in access --help as separate commands, which clutters the grammar #232 defines.

Fix: register them as access role set, access member get|set|unset subcommands, or mark these hidden ({ hidden: true }) if kept only for compatibility.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

access role set and access member get|set|unset are already registered at access.ts:329, 372, 427 and 466. role-set and member-get|set|unset are visible aliases of the same handlers so this is not a grammar gap. they just should not show up in help. will hide them.

tokenValidateOptions(tokenCmd.command('validate <token>'))
.description('Validate a session token using project API key')
.action(tokenValidateAction);
tokenValidateOptions(devCmd.command('token-validate <token>'))

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Same as access: token-validate and token-refresh (line 351) show up in dev --help. Make them dev token validate|refresh subcommands or hide them.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

same thing. dev token validate|refresh already exist at dev.ts:291 and 348. token-validate and token-refresh are just visible aliases. hiding them.

const keyCmd = projectCmd.command('key').description('Manage project API keys');

keyCmd
.command('show <project>')

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

#229 lists project key show --reveal, but there is no such option.

Fix: add --reveal (with the usual confirm / TTY guard) to print the full key, like project create --reveal.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

cannot do project key show --reveal with the current api. GET /:id/api-key only returns the prefix and metadata. the full secret is not stored recoverable see projects.controller.ts:179. rotate is the only path that returns the key and it already prints it. this is an #229 wording problem not a cli option so i will fix the issue instead of adding a flag that cannot reveal anything.

};

projectCmd
.command('list')

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

#228 conventions are only partly applied: --limit/--page/--all, -o csv, -q and per-command examples exist on some list commands only, and examples are per group in index.ts.

Fix: add the shared list options in one helper (e.g. lib/help.ts) and use it in every list/export command; add 2 addHelpText examples per command.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

accurate. the options are scattered unevenly: member.ts carries 7 of them, sync.ts and webhook.ts 3-4, project/role/server 2, ops.ts 1, and there is no -q anywhere under apps/cli/src. examples live in GROUP_EXAMPLES in index.ts, three per group rather than per command. moving them into a shared helper in lib/help.ts.

);

auditCmd
.command('export')

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

audit export only has --file/--force; the filters from audit list (actor, action, date range) are missing, so you cannot export a slice.

Fix: share the filter options with audit list and forward them to /admin/audit/logs/export.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

accurate. audit export registers only --file/--force/--profile (ops.ts:389-391) and forwards no query at all, while GET /admin/audit/logs/export accepts the full QueryAuditLogsDto (audit.controller.ts:123). sharing the filter builder with audit list is a straight copy.

});

inheritCmd
.command('set <sourceRole>')

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

#231 specifies role inheritance set <from> <to>; this takes <sourceRole> plus --target-scope/--target-servers.

Fix: accept <from> <to> as the issue says, or update the issue and docs to the new shape so they agree.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

accurate. it is set <sourceRole> plus --target-scope/--target-servers (role.ts:375), and UpsertInheritanceRuleDto has no target role field at all, just sourceRoleId/targetScope/targetServerIds, so <from> <to> has nothing to map onto today. i will align the issue wording to the real shape instead of inventing a target role.

{
"title": "mcid-cli",
"description": "Run the MCID MVP from the terminal: projects, servers, members, access, sync, audits and inbound webhooks.",
"pages": ["index", "reference", "webhooks"]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Docs are three pages (index, reference, webhooks); #228-#235 each ask for a page per command group, and the landing card (features/landing/content.ts:83) still describes only webhooks.

Fix: add projects, servers-sync, members-roles, access, ops, dev pages (each ending with Source:), list them here, and update the landing card and description.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

accurate. pages is [index, reference, webhooks] and the landing card still reads "manage your webhooks without the panel" (content.ts:84). the six group pages are going in with a Source: line each, plus the card and description.

@@ -0,0 +1,260 @@
import { mkdtemp, writeFile } from 'node:fs/promises';

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

#233 requires a test that webhook send passes the API's real HMAC check. All CLI tests use a fake server, so a signing mismatch would go unnoticed.

Fix: add a test that signs a body with the CLI signer and runs it through the API's verifySignature (import it, or add an e2e that posts the CLI-signed request).

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

accurate. the only signature assertion is the regex on the printed curl at line 166, and every cli test runs against a fake server, so signer drift would never surface. adding a test that pushes a cli-signed body through the api's verifySignature.

Comment thread apps/cli/vitest.config.ts
// old suite tested. Each floor sits ~1.5pt under the measured run
// (37.4 statements / 28.2 branches / 35.8 functions / 37.7 lines) so
// normal platform drift does not fail CI, and moves up as tests land.
thresholds: {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

src/commands coverage is about 42% lines, and the floors are set just under it, so about 58% of command code is never exercised and CI cannot catch a regression there.

Fix: add tests for the untested commands (ops, member, role, server) and raise the thresholds to match; target the repo's 80/75/68.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

accurate in substance. the config records the measured run at 37.4 statements / 28.2 branches / 35.8 functions / 37.7 lines with floors at 36/26/34/36, so the floors do sit just under it and most of the command surface is unexercised. (the run I can see shows 37.7 lines rather than ~42, same conclusion.) adding tests for ops, member, role and server and raising the floors.

@eequaled

eequaled commented Oct 25, 2026 •

Copy link
Copy Markdown
Author

@BenAbdou1001 thanks. i replied on four of the threads with what is already in place or blocked by the current api: the nested grammar already exists for access and dev, project key show --reveal cannot work because the api never returns the secret, and joinedAfter is not in the api yet.

the rest i am picking up:

i will only push after you approve the notes in those replies.

@BenAbdou1001

Copy link
Copy Markdown
Collaborator

@eequaled your notes are fine, go ahead and push. You're right on project key show --reveal (the endpoint only returns the prefix), so drop it and fix #229. Updating #231 to the real set <sourceRole> --target-scope/--target-servers shape is also right. Hiding the hyphenated aliases covers the grammar comments.

I ran 7a902e8 locally since CI is waiting for approval: CLI 289 tests, tsc and eslint clean, API 1387 tests, docs tests 638, and docs:api and the API types leave a clean tree.

@BenAbdou1001 BenAbdou1001 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approving as merged in cb02e60. The bundled CLI start-up crash is fixed in a161b28; the remaining gaps are listed on #228 to #236.

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.

3 participants